SSH

出典: Asterisk works Wiki
SSHの使い方をメモしておく
目次 |
設定
SSHサーバの設定は/etc/ssh/sshd_configを編集する。
セキュリティ上確認すべき主な項目は次の設定。
# rootでのログインを禁止する。この項目がyesならばnoにした方がよい。 PermitRootLogin no # パスワード無しのログインを許すか。 PermitEmptyPasswords no # .rhosts等を信用するか(RSA認証付き) RhostsRSAAuthentication no
パスワードなしで接続する方法
cron等で他のサーバとのやり取りを自動化する際には対話的なインターフェースではないのでパスワード認証では接続できない。そのため、公開鍵認証を用いてインタラクティブな入力なしに接続する方法をまとめる。
公開鍵の作成
まず、ssh-keygenを用いて公開鍵、秘密鍵のキーペアを作る。自動化を目的とする場合、パスフレーズなしで作ることが必要となる。そのため、-Nオプションを用いる。
>ssh-keygen -t rsa -N '' -f no-passphrase-key
ここでは-tオプションで暗号化方式を指定している。-fオプションは鍵の出力先のファイル名を指定しており、この例では秘密鍵がno-passphrase-key、公開鍵がno-passphrase-key.pubにそれぞれ作成される。
公開鍵をサーバに転送して登録する
公開鍵は接続先となるサーバに登録する必要がある。 SSHですでに接続できる場合はsftpを使って転送できる。最後に、.sshディレクトリのアクセス権が700(所有者のみ読み書きOK)になっていることを確認すること。このアクセス権以外では公開鍵で認証しない。
(昔は.sshディレクトリとauthorized-keysファイルのアクセス権が600(所有者のみ読み書きOK)、400(所有者のみ読み取りOK)になっていないといけなかったような気がするが...変わったのかなぁ)
>sftp 接続先のアドレス >put no-passphrase-key.pub >exit >ssh 接続先のアドレス >cat no-passphrase-key.pub >>.ssh/authorized-keys >chmod 600 .ssh/authorized-keys
秘密鍵を用いてアクセス
別のマシンからサーバにアクセスする。 秘密鍵のパスが標準でない($HOME/.ssh/id_rsa、$HOME/.ssh/id_dsa)でない場合、 sshでは-iオプション、sftpでは-oIdentityFileオプションを用いて指定する
>ssh -i private-key username@hostname >sftp -oIdentityFile=private-key username@hostname
トラブルシューティング
接続に失敗する
次のエラーが出てSSHが接続できない場合、/etc/hosts.allowおよび/etc/hosts.denyの設定の可能性がある。従ってこれらのファイルの編集が必要。
hosts.allowにsshdへのアクセスを許可するような設定をすれば解決するかも。詳しくはHosts.allowとhosts.deny
ssh_exchange_identification: Connection closed by remote host
接続が遅い
SSHでリモートホストに接続する際、パスワードを聞かれるまでが長い場合、UseDNSが設定されていない場合がある。この設定はデフォルトでyesとなっている。
この設定がyesとなっていると、接続の際IPアドレスからリモートホスト名を逆引き検索して、それをさらに正引きして、同じIPアドレスになるかを確認する。
特にローカルネットワークでDNSが無い場合等は無駄な設定なので次のようにnoを設定するとよい。
UseDNS no
Host key verification failed. というエラーがでて接続できない
リモートホストの OS 再インストールなどにより, 公開鍵が以前のものと変わってしまうことがある. その場合は Host key verification failed. と言われて接続できなくなる。
相手側のサーバが不正に変更されていないことを確認できれば、次のコマンドで~/.ssh/known_hostに記録されているエントリーを削除できる。 削除後はなじめて接続したときと同じ確認が再度あり、接続できるようになる。
> ssh-keygen -R <ホスト名>
