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 TermとWinSCPを,すべてのオプションをデフォルトのままでインストール.ところで,
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 公開鍵のファイル名
参考
ITmedia エンタープライズ : Linux Tips「TeraTermでパスワードログインを制限しRSAログインのみを許可させる」(http://www.itmedia.co.jp/help/tips/linux/l0410.htmll) 2009.1現在