SSHあれこれ
ssh
パスワードの問合せを行わない
ssh -o BatchMode=yes
ホスト鍵のチェックを行わない
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no
でホスト鍵のチェックを抑止して無条件でホスト鍵ファイルを更新。
UserKnownHostsFile=/dev/null
でホスト鍵ファイルの更新を無効化。
接続タイムアウト、キープアライブ
ssh -o ConnectTimeout=30 -o ServerAliveInterval=10
ConnectTimeout=30
で接続タイムアウトを30秒に変更。
ServerAliveInterval
秒間隔でkeep-aliveを送信し、ServerAliveCountMax
回(デフォルト3回)応答が無いと終了するので、
上記の例では30秒無応答なら終了。
ログアウト後も接続を維持する
ssh -o ControlMaster=auto -o ControlPath="%C" -o ControlPersist=60s
ログアウトした後、60秒間接続を維持する。
複数セッションによる接続の共有が有効になるので注意。ControlPathで作成したソケットを使用して接続を共有できてしまうため、他のユーザがアクセス出来ないディレクトリから実行する。
複数の踏台を経由して接続
例えば、下記のように複数の踏台を経由するネットワークで、client
からtarget
へssh target
で接続したい場合。
+--------+ +----------+ +----------+ +--------+
| client |--------------| gateway2 |--------------| gateway1 |--------------| target |
+--------+ 192.168.3.1+----------+ 192.168.2.1+----------+ 192.168.1.2+--------+
方法1 ProxyCommand
- .ssh/config
Host gateway2 HostName 192.168.3.1 User gw2user Host gateway1 HostName 192.168.2.1 User gw1user ProxyCommand ssh -W %h:%p gateway2 Host target HostName 192.168.1.2 ProxyCommand ssh -W %h:%p gateway1
- ProxyCommandの
-W
は-CW
でもOK、-C
はデータ圧縮なので経由するネットワークが細い場合におすすめ - 踏台も含めて公開鍵を登録しておけば、パスワード無しでログインできる
- 踏台によって公開鍵が異なる場合は
Host
単位にIdentityFile
で秘密鍵を指定できる??要チェック??
方法2 ProxyJump
- .ssh/config
Host gateway2 HostName 192.168.3.1 User gw2user Host gateway1 HostName 192.168.2.1 User gw1user Host target HostName 192.168.1.2 ProxyJump gateway2,gateway1
ProxyJump
はコマンドラインオプションの-J
でも指定可能。
踏み台の認証方法などは~/.ssh/config
に記述しておく。
ssh -J gateway2,gateway1 192.168.1.2
sshをSOCKSプロキシサーバにする
gatewayを踏み台にして、SOCKSに対応したアプリで接続する。
ssh -nTND 1080 gateway
1080
はプロキシのポート番号で任意。
SOCKSに対応したアプリで、
プロキシの種類をSOCKS5に、localhost:1080
をSOCKSサーバに設定する。
ポート番号の前にコロンを置き:1080
とすると、全てのインタフェースで接続を受け付ける。
限定したい場合はコロンの前にIPアドレスを記述する。
sshd
ネームサーバが無い環境でSSH接続に時間がかかる
sshdサーバのUseDNS
がyes
の場合、ネームサーバへの接続がタイムアウトするまで待たされる。
- /etc/ssh/sshd_config
UseDNS no
rootユーザでの接続を制限する
- /etc/ssh/sshd_config
PermitRootLogin no
no
だとrootユーザでログインできなくなる。
prohibit-password
にするとパスワード認証は拒否されるが、公開鍵認証ならログインできる。
yes
なら制限なし。
公開鍵
公開鍵ファイルの変換
sshで公開鍵を使用した認証は成功しているのに、key_load_public: invalid format
と警告が出る場合は、
公開鍵ファイルのフォーマットが正しくないか壊れている。
PuTTYとOpenSSHで公開鍵のフォーマットが異なるので、PuTTYのPEM形式のファイルをOpenSSHでも使うと起こる。
秘密鍵ファイルから公開鍵ファイルを作成する
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub
PuTTYの秘密鍵ファイル(PPK形式)をOpenSSHの形式に変換する
PuTTYから
File
>Load private key
>id_rsa.ppk
を指定Conversions
>Export OpenSSH key
>id_rsa
に出力
秘密鍵ファイルから公開鍵ファイル(PEM形式)を作成する
ssh-keygen -f ~/.ssh/id_rsa -y -e -m pem > ~/.ssh/id_rsa.pem
公開鍵ファイルをPEM形式に変換する
ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem > ~/.ssh/id_rsa.pem