多くの場所では Telnet での接続をやめて、代わりに SSH を使うことが義務付けられています。その理由は、より高いセキュリティです。Telnet を使ってログインすると、パスワードだけでなく他のデータもクリアテキストで送信されます。ネットワークアナライザを持っている人なら誰でもあなたが送ったものを読むことができます。一方、SSH はすべてのデータを暗号化して読めなくします。Telnet と SSH デーモンは互換性のあるユーザ体験を提供していると仮定していますが、これは正しくありません。
まず、SSH クライアントと Telnet クライアントには多くの異なるものがあります。これらは異なるユーザインタフェースを持ち、異なる端末タイプを使うことがあります。同じターミナルタイプを使っていても、ターミナルをエミュレートしているので、挙動が異なるかもしれませんし、エミュレートは完全ではありません。しかし、クライアントソフトウェアの違いを差し引いても、Telnet デーモン (telnetd または telnet_msd) に接続されたセッションと SSH デーモンに接続されたセッションの間には、いくつかの微妙な違いがあります。また、いくつかのバグがありますが、それについても説明します。OpenVOS のリリース 2.1.0k 用の Internet Security Pack (ISP) の SSH デーモンを使用していることを覚えておいてください。これは私がこれを書いた時点で入手可能な最新版です。
ユーザー名。
ログインする前に、Telnet と SSH のユーザ名の扱い方に違いがあります。Telnet デーモンでは、ユーザ名のユニークなバリエーションでログインすることができ、 名前は大文字小文字を区別しません。Noah_Davidsというユーザ名があれば、Telnetを使うときはNoah_D, noah_d, NoAh_D, NoAh_DaViDsとしてログインできますが、SSHで動作するのはNoah_Davidsだけです。私が使っているndというエイリアスも同じように動作します。Telnetではnd、ND、NDが使えますが、SSHではndしか動作しません。
グループ名。
Telnet接続で表示されるログインプロンプトでは グループ名
telnet 164.152.77.217 試してみると... 164.152.77.217に接続しました。 エスケープ文字は「^」です。] OpenVOS リリース 17.1.0ax、モジュール %phx_vos#m17 ログインしてください 15:24:14 ログイン nd.SysAdmin パスワードは?[ここに入力されたパスワード] ノア_デビッドSysAdmin12-12-12 15:24:55 mst.で %phx_vos#m17 にログインしました。 |
図 1 - グループ名での Telnet ログイン |
しかし、SSHプロトコルではユーザ名しか許可されていません。グループ名を入れるとユーザー名の一部として扱われてしまい、ログインに失敗してしまいます。
>システム>openssl>bin>ssh [email protected] nd.システム管理者164.152.77.217のパスワード: [ここに入力されたパスワード] 許可が拒否されました。 [email protected]'s password: |
図 2 - グループ名での SSH ログイン |
一度ログインすると、サブログインでグループを変更することができます(ただし、現在の制限事項については以下の ssl-403 のセクションを参照してください)。
パスワードの違い。
Telnet接続とSSH接続のパスワード処理の最大の違いは、SSHは認証にパスワードを必要としないことです。公開鍵と秘密鍵のペアを設定することで、パスワード入力のステップをすべて省略することができます。その設定方法については、Setting up Stratus STCP SSH to use public key authentication を参照してください。
パスワードを使用している場合、いくつかの違いがあります。まず、パスワードの有効期限の扱いが異なります。Telnetでは、パスワードの有効期限が切れると、ログイン画面で警告が表示され、パスワードを変更することができます。
telnet 164.152.77.217
試してみると...
164.152.77.217に接続しました。
エスケープ文字は「^」です。]
OpenVOS リリース 17.1.0ax、モジュール %phx_vos#m17
ログインしてください 14:04:40
ログインND
パスワードは?[ここに入力された現在のパスワード]
パスワードの有効期限は5日です。
新しいパスワード(初回入力)ですか?
|
図 3 - Telnet 接続パスワードの有効期限切れの警告/プロンプト |
SSH は警告を出しますが、変更するオプションはありません。change_password コマンドを使ってパスワードを無効にする必要があり、次回ログイン時にパスワードを変更するように強制されます。
ssh [email protected] [email protected] のパスワード: [ここに入力された現在のパスワード] パスワードの有効期限は5日です。 Noah_Davids.CAC は %phx_vos#m17 で 13-01-09 13:06:35 mdt でログインしました。 いらっしゃいませ 用意ができました 13:06:35 パスワードの変更 パスワードが無効になっています。次回ログイン時に変更してください。 準備完了 13:06:49 |
図 4 - SSH 接続パスワードの有効期限切れの警告 とchange_passwordコマンド |
パスワードの有効期限が切れると(または change_password コマンドで無効にした場合)、パスワードを変更するように促されます。Telnetとは異なり、これは任意ではないので、この時点でパスワードを変更する必要があります。パスワードを変更した後は自動的にログアウトされ、再度ログインする必要があります。
ssh [email protected] [email protected] のパスワード。 警告: パスワードの有効期限が切れています。 今すぐパスワードを変更して、再度ログインしてください! 現在のパスワードは?[ここに入力された現在のパスワード] 新しいパスワード(最初に入力したパスワード)?新しいパスワードを入力してください。 新しいパスワード(2回目の入力)?新しいパスワードを入力してください。 164.152.77.217への接続は終了しました。 |
図5 - SSH接続中にパスワードを変更する |
もう一つの違いは、SSH接続はチャレンジレスポンスパスワードをサポートしていないのに対し、Telnet接続はチャレンジレスポンスパスワードをサポートしていることです。
サブシステム。
最初に Telnet でモジュールに接続するときは、login コマンドで サブシステム
OpenVOS リリース 17.1.0ax、モジュール %phx_vos#m17
ログインしてください 11:23:40
ログイン -form -useage
--------------------------------- login -------------------------------
ユーザー名を指定します。
-権限: 登録されているように
-パスワードを変更します。
-パスワードの変更: no
-優先度を指定します。
-home_dir.
-モジュール。
-サブシステム。
|
図 6 - Telnet 接続では、サブシステム名を指定することができます。 |
ssh プロトコルには、サブシステム名を指定するメカニズムがありません。登録データベースエントリで must_use_subsystem フラグが設定されている場合、登録エントリで指定された最初のサブシステムが自動的に使用されます。このビットがセットされていない場合は、サブシステムは使用されません。(ISP 2.1.0jリリース以前は、must_use_subsystemビットが設定されていなくても、最初のサブシステムが使用されていたことに注意してください)。実際にログインする前に利用できるログインコマンドの引数には、サブシステムを指定する方法が含まれていますが(図6を参照)、ログインすると、そのオプションは利用できなくなります(図7を参照)。
ログイン -form -useage --------------------------------- login ------------------------------- グループ名: CAC -特権者: はい -優先度を指定します。 -パスワードを指定します。 -モジュール。 |
図 7 - サブログインコマンドラインの引数 |
一度ログインしたサブシステムに入るには、Telnetでシステムに戻って再度ログインするしかありません。
telnet 127.0.0.0.1 試してみると... 127.0.0.0.1に接続しました。 エスケープ文字は「^」です。] OpenVOS リリース 17.1.0ax、モジュール %phx_vos#m17 ログインしてください 11:37:34 ログイン nd -subsystem test_ss パスワードは? Noah_Davids.CAC は %phx_vos#m17 で 12-12-13 11:37:49 mst でログインしました。 これはテストサブシステム 用意ができました 11:37:49 |
図 8 - ループバックアドレスへの Telnet とサブシステムへの再ログイン |
アクセスコントロールです。
Telnet接続もSSH接続もTCPラッパーをサポートしており、 IPアドレスに基づいてアクセスを制限することができますが、 Telnetデーモンでは、デフォルトではTCPラッパーは有効になっておらず、 -tcpwrapper_checkコントロール引数で明示的に有効にしなければなりません。SSHデーモンでは、TCPラッパーはデフォルトで有効になっており、 無効にする方法はありません。TCPラッパーのコンフィギュレーション・ファイル「hosts.allow」で、 すべてのSSH接続を許可することで、効果的に無効にすることができます。
telnetd -form -usage
------------------------------- telnetd ------------------------------
-service_file. >システム>stcp>telnetservice
-tcpwrapper_check: no
-数値: はい
|
図9 - telnetdデーモンでTCPラッパーを有効にする |
telnet_msd -form -usage
------------------------------ telnet_msd ----------------------------
-network_port. 24
-max_sessions. 28
-error_severity: 2
-separate_log: yes
-log_dir. システム >system>stcp>logs
-vterm_starname: telnet*
-vterm_login: はい
-vterm_slave_id.
-拡張子: 133
-force_edit: はい
-EC_decimal_value: 8
-EL_decimal_value: 21
-tcpwrapper_check: no
-数値: なし
|
図10 - telnet_msdデーモンでTCPラッパーを有効にする |
sshd デーモンはまた、sshd_config ファイル内のオプションもサポートしており、 ssh を使用してアクセスを許可するユーザまたはグループ (AllowUsers および AllowGroups ディレクティブ)、または ssh を使用してアクセスを拒否するユーザまたはグループ (DenyUsers および DenyGroups ディレクティブ) を指定できるようにしています。これらのディレクティブでは、ユーザ名やソースドメインやその組み合わせを指定することができます。noah_davids を corp.stratus.com からは許可するが、 az.stratus.com からは拒否することができます。
AllowUsers *@*.stratus.com DenyUsers *@*az.stratus.com |
図 11 - sshd_config の AllowUsers および DenyUsers ディレクティブの例 |
システム >system>openssl>bin>ssh [email protected] [email protected] のパスワード。 許可が拒否されました。 [email protected] のパスワード。 |
図 12 - DenyUsers ディレクティブが原因で phxtest-m15.az.stratus.com からのログインが拒否されました。 |
コマンド環境。
Telnet接続でログインすると、標準のVOSコマンド環境が表示されます。SSHでは、管理者が標準のコマンド環境かbashシェル環境のどちらかを指定することができます。これはポート番号に基づいて行われます。
ディーシーエスシーサービス %phx_vos#m17_mas>opt>openssl>etc>sshservices 12-12-13 12:31:31 mst ssh "window_term" "" "login" 1 1 1 s$pt_log.m16 ssh2200 "window_term" "-殻" "bash" 1 1 1 s$pt_log.m16 |
図 13 - sshservices ファイル、ポート 22 は標準の VOS コマンドラインです。 ポート2200はバッシュシェル |
>システム>openssl>bin>ssh [email protected] -p 2200 [email protected] のパスワード。 いらっしゃいませ シャ-2.05ドル |
図 14 - ポート 2200 を使用した SSH 接続と bash シェルの取得 |
環境変数です。
デフォルトでは Telnet 接続では 6 つの環境変数しか設定されていませんが、SSH 接続では 12 の環境変数が設定されています。
羨望の眼差し HOME=SysAdmin/Noah_Davids LOGNAME=ルート PATH=.:/system/command_library:/system/applications_library:/system/maint_librar +y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml +2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library +:/system.17.1/gnu_library/bin VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m +MySQL:/system/stcp/include_library/compat:/system/include_library VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/です。 +stcp/object_library/complib:/system/posix_object_library/thread:/system/posix__object_library/complib:/system/posix_object_library/thread:/system/posix_object_library +オブジェクトライブラリ:/system/c_object_library:/system/object_library TERM=vt100 |
図 15 - Telnet 接続で設定された環境変数 |
羨望の眼差し HOME=SysAdmin/Noah_Davids PATH=.:/system/command_library:/system/applications_library:/system/maint_librar +y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml +2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library +:/system.17.1/gnu_library/bin VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m +MySQL:/system/stcp/include_library/compat:/system/include_library VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/です。 +stcp/object_library/complib:/system/posix_object_library/thread:/system/posix_object_library/complib:/system/posix_object_library/thread:/system/posix_object_library/complib +オブジェクトライブラリ:/system/c_object_library:/system/object_library TERM=vt100 TZ=mst+07:00:00:00 USER=Noah_Davids LOGNAME=Noah_Davids MAIL=/var/spool/mail/Noah_Davids SHELL=/bin/sh SSH_CONNECTION=164.152.77.34 49573 164.152.77.217 22 SSH_TTY=#s$pt_log.m16_3 |
図 16 - SSH 接続で設定された環境変数 |
デバイスの種類。
最後に、これは Telnet と SSH の違いではなく、telnetd と sshd デーモンと telnet_msd デーモンの違いです。telnetd と sshd はどちらも window_term デバイスを使用していますが、telnet_msd は vterm デバイスを使用しています。vterm デバイスと window_term デバイスがコマンドラインでいくつかのファンクションキー (CANCEL など) を扱う方法と、生の画面出力を扱う方法には、いくつかの違いがあります。独自のフォームを作成し、新しい s$control OP_CODES を使用するように更新されていないアプリケーションの中には、window_term デバイスを使用してそれらのフォームを正しく表示しないものがあります。これらのアプリケーションに対処するための2番目の最善の方法は、システムに接続するためにSSHトンネルを使用することであり、トンネルはその後、telnet_msdデーモンに接続するように設定されます。アプリケーションを処理する最善の方法は、もちろん、新しいOP_CODESを使用するように更新することです。
Telnet と SSH に固有の上記の違いの他に、将来のリリースで修正される予定のいくつかのバグがあります。
ssl-403 利用可能なグループ。
Telnet で接続する場合、登録エントリで指定したすべてのグループがサブログインで利用可能ですが、ssh では最初の 5 つのグループのみが利用可能です。
グループ、CAC、SysAdmin、Group_3、Group_4、Group_5、Group_6に登録しています。Telnet接続から任意のグループを使用してサブログインを行うことができます。
telnet 164.152.77.217 試してみると... 164.152.77.217に接続しました。 エスケープ文字は「^」です。] OpenVOS リリース 17.1.0ax、モジュール %phx_vos#m17 ログインしてください 15:38:02 ログインND パスワードは?[ここに入力された現在のパスワード] Noah_Davids.CAC が %phx_vos#m17 でログインしました。 ログイン Group_5 Noah_Davids.Group_5 は %phx_vos#m17 でログインしました。 準備完了 15:39:39 ログアウト ログイングループ_6 Noah_Davids.Group_6 は %phx_vos#m17 でログインしました。 準備完了 15:40:13 |
図 17 - Telnet 接続によるサブログイン |
しかし、sshでは、Group_6を使おうとするとエラーが出てしまいます。
>システム>openssl>bin>ssh [email protected] [email protected] のパスワード。 Noah_Davids.CAC は %phx_vos#m17 でログインしました。 準備ができました 15:41:02 ログイングループ_5 Noah_Davids.Group_5 は %phx_vos#m17 でログインしました。 準備完了 15:41:24 ログアウト ログイングループ_6 ログインしてください。引数の形式が無効です。group_name に group_6 は許可されていません。 準備完了 15:41:59 |
図 18 - SSH 接続によるサブログイン |
ssl-418 - サブプロセスレベル。
Telnet経由でのログインはサブプロセスレベルが0で、SSH経由でのログインはサブプロセスレベルが3です。
telnet 164.152.77.217
試してみると...
164.152.77.217に接続しました。
エスケープ文字は「^」です。]
OpenVOS リリース 17.1.0ax、モジュール %phx_vos#m17
ログインしてください 14:15:34
ログインND
パスワードは?[ここに入力された現在のパスワード]
Noah_Davids.CAC は %phx_vos#m17 でログインしました。
準備完了 14:15:39
display_line (process_info sub_process_level)
0
準備完了 14:15:49
|
図 19 - Telnet 接続で設定された Sub_process レベル |
システム >system>openssl>bin>ssh [email protected] [email protected] のパスワード: [ここに入力された現在のパスワード] Noah_Davids.CAC は %phx_vos#m17 でログインしました。 準備完了 14:12:23 display_line (process_info sub_process_level) 3 準備ができました 14:12:37 |
図 20 - SSH 接続で設定された Sub_process レベル |
2013年1月14日の更新。これはバグではなく機能であることがわかりました。sshd プロセスは、リスニングプロセスを開始するために start_process が行われたときに最初にフォークされ、sshd が接続を受け入れたときに 2 番目にフォークされ、ユーザログインプロセスが作成されたときに 3 番目にフォークされます。Telnet では、ユーザプロセスを開始するために別のメカニズムを使用していますが、これではフォークされたプロセスは発生しません。
時間帯の問題。
最後に、サマータイムと標準時間の変更、あるいはもっと一般的にはタイムゾーンの変更に関連したいくつかの問題があったことを言いたいだけです。SSH 経由でログインしたセッションでは、新しいデフォルト設定が反映されませんでした。これらの問題はすべてこの最新リリース (2.1.0k) で修正されているはずです。