SSHの使い方のメモ書き。
日記から:
基本的にownerしか読み書き出来ないようにしておく。OpenSSHのバージョンや設定によっては、owner以外にrとかxが許可されてるとエラーになって接続出来なかったりするっぽい。
$ chmod 700 ~/.ssh $ chmod 600 ~/.ssh/authorized_keys
ログインのbash起動時に ssh-agent 立ちあげて、そこからscreen経由でサブのbash開く時は単にssh-agentの環境変数読むだけで、最後にログアウトするときに ssh-agent -k するTips:
.bashrc:
SSH_AGENT_SRC=~/.ssh_agent_env if [ ! -f ${SSH_AGENT_SRC} ]; then echo "ss-agent starting..." ssh-agent > ${SSH_AGENT_SRC} fi source ${SSH_AGENT_SRC} ssh-add -l >&/dev/null if [ $? == 2 ] ; then echo -n "ssh-agent: old env rmeains, restarting...." ssh-agent > ${SSH_AGENT_SRC} source ${SSH_AGENT_SRC} fi
.bash_logout:
SSH_AGENT_SRC=~/.ssh_agent_env ssh-agent -k >& /dev/null /bin/rm -f ${SSH_AGENT_SRC}
ポイント:
・・・ただし、これだと、screenをdetachしてログアウトしてしまうと、screenの各セッションから参照しているssh-agentが終わってしまうので、もう一度SSHとかでログインしてscreen -rすると、ssh-agentと通信できなくなっててアウトな気がする。
ちょっと使い方に工夫と注意が必要そう。bashの関数にして、ユーザが明示的に操作できるようにするのもありか。
参考:
ssh-keygenで個人的に気になる点をメモ。
ぐぐってみると、記事によっては "-t dsa" を指定したり "-t rsa" を指定してる。
SSHのプロトコルバージョンと、RSAの特許の有効期限に関連してバリエーションが出来ている。
SSHプロトコルバージョン1用には、"-t rsa1"を使う。
ただし、RSAの特許の問題もあり、SSHプロトコルバージョン2ではDSAがサポートされた。
→DSAを使う場合は "-t dsa" を指定する。
2000年になりRSAの特許の有効期限が切れた・・・らしい。そのため、以降のOpenSSHでは、SSHプロトコルバージョン2用として "-t rsa" をサポートして、RSAを使えるようになった。
DSAはあくまでも"Digital Signature Algorithm"であり、電子署名に使われることを想定していた。暗号化に使うことは想定していなかった・・・らしい・・・。後にDSAを暗号化に使う方法が出てきたが、速度が遅いとかナントカ。
なので、2013年の今となっては、SSHプロトコルバージョン2用のRSAとして "-t rsa" を選択するのが無難。
※RSA/DSAの仕様や、それらがどうSSHプロトコルに関連するのか、SSHプロトコルの中身など自分で調べず、下記参考資料からの抜き書きでまとめてますので、正確性は保証出来ません・・・。
参考1(2005年以降とかわりと新しいWebページ):
参考2(2001 - 2003年ごろのリソース):
→秘密鍵のファイル名を "-f" で指定する。公開鍵のファイル名は指定できない(多分)。公開鍵のファイル名は、秘密鍵のファイル名の後ろに ".pub" が追加される。
$ ssh-keygen.exe -t rsa -f abc -> 現在ディレクトリに "abc"(秘密鍵), "abc.pub"(公開鍵)が生成される。
ssh-keygenで生成される鍵ファイル("-t rsa"の場合):
秘密鍵:(多分PKCS8かPEM形式のどちらかかと・・・)
-----BEGIN RSA PRIVATE KEY----- AAAAAAAAAAAAAAAAAAA.... ... AAAAAA....AAAA -----END RSA PRIVATE KEY-----
公開鍵:→そのまま、"~/.ssh/authorized_keys" に追加できる形式になっている。
ssh-rsa AA.....AAA user@host
また、ssh-keygenの"-i", "-e"オプションでは、読み込む鍵ファイルのフォーマットを "-m" オプションで 'RFC4716', 'PKCS8', 'PEM' のどれかを指定出来ます。
"-e" : 他のSSH実装で生成された秘密鍵・公開鍵ファイルをOpenSSHのフォーマットに変換
"-i" : 公開鍵や、暗号化されていない秘密鍵ファイルを読み込んでOpenSSHのフォーマットに変換
※ただ、今の自分の知識ではどれがどう異なるのか良くわかりません・・・。特にPKCS8とPEMの違いが理解不能。
参考:
"ssh-keygen -y" を使うと便利です。他にもOpenSSLコマンドを使う手法もあるようです。
-y This option will read a private OpenSSH format file and print an OpenSSH public key to stdout.
$ ssh-keygen -y -f 秘密鍵ファイル名 Enter passphrase:(パスフレーズ入力) →"ssh-rsa AAA...AAA" というように公開鍵が出力されます。
authorized_keysに追加するには、さらに行末にコメントを追加しておきます。
ex: "ssh-rsa AAA...AAA this_is_repaired_public_key"
パスフレーズを設定していない秘密鍵を指定した場合は、パスフレーズの入力なしでいきなり公開鍵が出力されます。
参考:
$ ssh-keygen -p -f 秘密鍵ファイル名
→新しいパスフレーズを聞かれるので、何も入力しなければパスフレーズ無しに、パスフレーズを入力すればパスフレーズ有りになります。
注意点:秘密鍵ファイルは 上書き保存される ため、もし不安であればバックアップをとって置くと良いでしょう。
"~/.ssh/config":
# "ssh myserv1" == "ssh -i .ssh/server1_private_key -p 2222 user01@myserv1.example.com" Host myserv1 HostName myserv1.example.com Port 2222 User user01 IdentityFile .ssh/server1_private_key # for GitHub ssh user Host github.com HostName github.com User git IdentityFile .ssh/git_private_key
参考:
AWSやローカルのVM環境で、IPアドレスやホストの鍵が頻繁に変わるような場合、 "~/.ssh/known_hosts" のホスト鍵のチェックに失敗して接続できないケースがあります。
そのような場合、意図的に known_hostsのチェックをskipしたり、known_hostsへの自動追加を無効化しておく方法があります。
もちろん、ホストのなりすましに対して弱くなってしまうので、環境によってバランスを考慮する必要はあります。
1. 厳密なホスト鍵チェックを無効化し、known_hostsに登録済みの既存の鍵と異なっていても接続を拒否しない。
StrictHostKeyChecking no
2. ホスト鍵の追加先を/dev/nullにすることにより、自動追加を無効化。
UserKnownHostsFile /dev/null
"~/.ssh/config" 設定例:
Host test HostName 192.168.1.20 User username Port 22 StrictHostKeyChecking no UserKnownHostsFile /dev/null
sshコマンドラインオプションでの指定例:
ssh username@192.168.1.20 -o "StrictHostKeyChecking no" -o "UserKnownHostsFile /dev/null"
PuTTY、TortoiseXXX系のツール、WinSCPなどで提供されている "puttygen.exe" で生成した秘密鍵・公開鍵ファイルは、OpenSSHで生成したものとはフォーマットが違うため、変換が必要です。
puttygen.exeを起動して、"Conversions"メニューから"Import Key"をクリックし、 puttygen.exeで生成した秘密鍵を選択すると 、秘密鍵を読み込み公開鍵情報やコメント情報を表示してくれます。その後、"Conversions"メニューから"Export OpenSSH Key"とすればOpenSSH形式の 秘密鍵ファイルに 変換出来ます。
OpenSSH形式の = "authorized_keys"にそのまま追加出来る形式の公開鍵ファイルには変換してくれませんので、puttygen上で表示された公開鍵情報を手動でコピペすることになります。といっても、
ssh-rsa (ここにputtygenでインポートして表示された公開鍵の文字列を1行にしてコピペ) comment
という形式でauthorized_keysに書き込めば終わりです。
なお、authorized_keysを編集する場合は、一旦保存した後、ターミナルソフトの画面幅を変えてもう一度表示して見ることをおすすめします。時々コピペした時に改行が混ざってたりして、それらの消し忘れを画面幅を変えて折り返しを変えることで確認します。
参考: