SSH

(2010.5.17-2022.8.19)

sshで安全にリモート接続.

(環境) CentOS 5.2-5.7, 6.2, TeraTerm4.64, WinSCP 4.27

インストール

(以下プロンプトが#ならroot,$なら普通のユーザー)

CentOS 5.2では標準でSSHサービスが動いている.必要なら,yumでインストールして起動,サービス開始しておく.

# yum install sshd

# /etc/init.d/sshd start

# /sbin/chkconfig sshd on

Windowsには,Tera TermWinSCPを,すべてのオプションをデフォルトのままでインストール.ところで,

Tera Termとは,Windowsパソコンからlinuxサーバにsshでログインするソフト(注1),

WinSCPとは,Windowsパソコンからlinuxサーバにsshでファイル転送するソフト(注2).

以下,linuxサーバをa.com,もう一台のlinuxサーバをb.comとする.

(注1)Windows10以降では,Teratermをインストールしなくても,コマンドプロンプトやPowerShellでssh接続できる。

(注2)WinSCPの文字化けについて.WinSCPデフォルト設定でCentOS5に接続すると,日本語ファイル名が文字化けする.セッションの設定画面の環境で,[ファイル名をUTF-8でエンコード]を[自動]ではなく[オン]にするとこの問題は解決する.[自動]のバグと思われる.

パスワードログイン

TeraTermから:

WindowsでTera Termを起動する.[新しい接続]ダイアログボックスで,[ホスト]a.com,[サービス]を[SSH]にして[OK].[SSH認証]で[プレインテキストを使う]を選択し,[ユーザ名]と[パスワード]を入れて[OK].

WinSCP:

WinSCPを起動して,[WinSCP ログイン]ダイアログボックスで,[新規]ボタンを押す.[ホスト名],[ユーザ名]と[パスワード]を設定する.[保存]ボタン押してセッション名をつけて保存してログインする.次回からは,WinSCPを起動して,セッション名を選ぶだけでログインできる.

Linuxサーバ間:

他のサーバーb.comにパスワードログインするには,

# ssh root@b.com

@の前がユーザ名,後がログイン先のサーバー名.

RSA鍵を使ってログイン

TeraTerm:

(端末の鍵を生成)

  • Tera Termを起動.[新しい接続]ダイアログボックスは[キャンセル]する.

  • [設定]-[SSHキー生成]で,[キーの種類]を[RSA]にし,[生成]ボタンを押す.[キーのパスフレーズ]は空欄のままにして,[公開鍵の保存],[秘密鍵の保存]を押してそれぞれの鍵をデフォルトの名前で保存する.これらの鍵は

C:\Program Files\teraterm\

に次のようなファイル名で保存される。鍵はホスト名を変えても使える。

id_rsa.pub (公開鍵, 鍵のテキストの末尾の ユーザ名@ホスト名 はコメントで,書き換えてもOK。)

id_rsa (秘密鍵)

(秘密鍵を設定)

  • [設定]-[SSH認証]で,a.comのユーザを[ユーザ]に入れ,[RSA/DSA鍵を使う]を選択し,[秘密鍵]に先に作成したid_rsaを指定し,[OK]を押す.[設定]-[設定の保存]でこの設定を保存しておく.Tera Termを終了する.

(公開鍵をサーバにインストール)

  • 公開鍵id_rsa.pubは,中身が1行のテキストファイルである.これを,ログインしたいユーザのホームディレクトリの下の.sshフォルダのauthorized_keysファイルに追加する..sshフォルダや,authorized_keysファイルが無い場合は新たに作り,パーミッションを次のようにしておく.

drwx------ 2 root root 4096 1月 25 11:10 .ssh

-rw------- 1 root root 644 1月 25 11:10 authorized_keys

authorized_keysファイルでは,#で始まる行や空行はコメントになるので,どのマシンの公開鍵かをコメントで書いておくとよい.

(サーバーの設定)

  • /etc/ssh/sshd.configファイルをバックアップしてから

# cd /etc/ssh/

# cp sshd_config sshd_config.org

sshd_configファイルを次のように修正して,サーバのsshの設定をおこなう.

# vi sshd.config


AuthorizedKeysFile .ssh/authorized_keys

PasswordAuthentication no ←プレインパスワードログインを禁止する場合のみ.

修正後sshを再起動する.

# /etc/init.d/sshd restart

これで,Tera Termを起動し,[新しい接続]ダイアログボックスも[SSH認証]ダイアログボックスも何も入力せずに[OK]を押すだけで,上で設定したユーザでa.comにログインできる.なお,[セキュリティ警告]は,[このホストをknown hostsリストに追加する]をチェックして[続行]をクリックする.プレインパスワードログインを禁止しておけば,便利な上に安全.

WinSCP:

(鍵の変換)

  • [スタート]メニューから[WinSCP]-[鍵関連ツール]-[PuTTYgen]を起動する.

  • [Load]ボタンを押して,[ファイルの場所]をC:\Program Files\teraterm\,[ファイルの種類]を[All Files]にして,Tera Termで作成したid_rsaを[開く].

  • うまく開けたら,[Save private key]ボタンを押して,パスフレーズは入れずに,[ファイル名]にid_rsa.ppkと入力して[保存]する.[x]ボタンでツールを終了する.

(セッションの作成)

  • WinSCPを起動して,[WinSCP ログイン]ダイアログボックスで,[新規]ボタンを押す.

  • [ホスト名],[ユーザ名]と[秘密鍵]を設定する.秘密鍵は上で変換したC:\Program Files\teraterm\id_rsa.ppk.[保存]ボタン押してセッション名をつけて保存してログインする.

  • 次回からは,WinSCPを起動して,セッション名を選ぶだけでログインできる.

Linuxサーバ間:

(a.comの鍵を生成)

  • ホームディレクトリで,a.comの公開鍵と秘密鍵をつくる.

# cd

# ssh-keygen

鍵はホームディレクトリ下のディレクトリ.sshの中に,Tera Termで作ったときと同じ名前で,それぞれid_rsa.pub,id_rsaという名前で作られる.なお,パスワードなどの入力を求められたらすべて何も入れずに[Enter]キーを押す.

  • 後は,Tera Termからa.comにログインできるように設定したのと同じように,ログインしたい他のサーバーb.comにa.comの公開鍵をインストールして,b.comのsshを設定すればOKである.Linuxサーバー間では,公開鍵をコピーするコマンドssh-copy-idが用意されているので,まず,

# ssh-copy-id -i .ssh/id_rsa.pub root@b.com

で公開鍵をb.comにインストールする.

  • 次に,b.comにログインして,sshd.configファイルをバックアップしてから

# cd /etc/ssh/

# cp sshd_config sshd_config.org

sshd_configファイルを次のように修正して,b.comのsshの設定をおこなう.

# vi sshd_config


RSAAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

PermitRootLogin without-password ←パスワードログインを禁止

PasswordAuthentication no ←プレインパスワードログインを禁止する場合のみ.

  • 修正後sshを再起動する.

# /etc/init.d/sshd start

以上で

# ssh root@b.com

でa.comからb.comにパスワード無しでログインできる.

なお,sshコマンドでa.comの秘密鍵を指定するには,-i オプションに続けて秘密鍵ファイルを書く。例

#ssh -i .ssh/id_rsa2 root@b.com

SSHサーバーのRSA公開鍵

SSHは,ログイン認証に使うRSA公開鍵の他に,暗号化通信をするためのRSA公開鍵も使う。これは /etc/ssh/のssh_host_方式_key.pub(対応する秘密鍵はssh_host_方式_key)に入っている。方式は公開鍵暗号の方式で,RSA,ECDSA,dDSAなど。

SSHクライアントがサーバーに最初に接続する時,クライアントは「これはサーバーの正しい公開鍵ですか?」と公開鍵のフィンガープリント(ハッシュ値)と方式を示して確認してくる。これがサーバーが公開している公開鍵のフィンガープリントと一致していれば,SSH通信を始めれば良い。

公開鍵からそのフィンガープリントを得るには,次のコマンドを使う。

ssh-keygen -lf 公開鍵のファイル名

参考

  1. ITmedia エンタープライズ : Linux Tips「TeraTermでパスワードログインを制限しRSAログインのみを許可させる」(http://www.itmedia.co.jp/help/tips/linux/l0410.htmll) 2009.1現在