kilin> how to> SSH

SSH

(2010.5.17-2014.5.21)

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でログインするソフト,
WinSCPとは,Windowsパソコンからlinuxサーバにsshでファイル転送するソフト.(
以下,linuxサーバをa.com,もう一台のlinuxサーバをb.comとする.

パスワードログイン

TeraTermから:

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

WinSCP:

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

Linuxサーバ間:

他のサーバーb.comにパスワードログインするには,
# ssh root@b.com
@の前がユーザ名,後がログイン先のサーバー名.

RSA鍵を使ってログイン

TeraTerm:

(端末の鍵を生成)
1.Tera Termを起動.[新しい接続]ダイアログボックスは[キャンセル]する.
2.[設定]-[SSHキー生成]で,[キーの種類]を[RSA]にし,[生成]ボタンを押す.[キーのパスフレーズ]は空欄のままにして,[公開鍵の保存],[秘密鍵の保存]を押してそれぞれの鍵をデフォルトの名前で保存する.これらの鍵は
C:\Program Files\teraterm\
に次のようなファイル名で保存される。鍵はホスト名を変えても使える。
鍵の種類 ファイル名  
公開鍵 id_rsa.pub 鍵のテキストの末尾の ユーザ名@ホスト名 はコメントで,書き換えてもOK。
秘密鍵 id_rsa  
(秘密鍵を設定)
3.[設定]-[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:

(鍵の変換)
1.[スタート]メニューから[WinSCP]-[鍵関連ツール]-[PuTTYgen]を起動する.
2.[Load]ボタンを押して,[ファイルの場所]をC:\Program Files\teraterm\,[ファイルの種類]を[All Files]にして,Tera Termで作成したid_rsaを[開く].
3.うまく開けたら,[Save private key]ボタンを押して,パスフレーズは入れずに,[ファイル名]にid_rsa.ppkと入力して[保存]する.[x]ボタンでツールを終了する.
(セッションの作成)
4.WinSCPを起動して,[WinSCP ログイン]ダイアログボックスで,[新規]ボタンを押す.
5.[ホスト名],[ユーザ名]と[秘密鍵]を設定する.秘密鍵は上で変換した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サーバーのRSA公開鍵

SSHは,ログイン認証に使うRSA公開鍵の他に,暗号化通信をするためのRSA公開鍵も使う。これは /etc/ssh/のssh_host_rsa_key.pub(対応する秘密鍵はssh_host_rsa_key)に入っている。SSHクライアントがサーバーに最初に接続する時,クライアントは「これはサーバーの正しい公開鍵ですか?」と公開鍵のフィンガープリント(ハッシュ値)を示して確認してくる。これがサーバーが公開している公開鍵のフィンガープリントと一致していれば,SSH通信を始めれば良い。
公開鍵からそのフィンガープリントを得るには,次のコマンドを使う。
ssh-keygen -l -f 公開鍵のファイル名

参考

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

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