articles: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からtargetssh 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

gatewayを踏み台にして、SOCKSに対応したアプリで接続する。

ssh -nTND 1080 gateway

1080はプロキシのポート番号で任意。

SOCKSに対応したアプリで、 プロキシの種類をSOCKS5に、localhost:1080をSOCKSサーバに設定する。

ポート番号の前にコロンを置き:1080とすると、全てのインタフェースで接続を受け付ける。 限定したい場合はコロンの前にIPアドレスを記述する。

sshdサーバのUseDNSyesの場合、ネームサーバへの接続がタイムアウトするまで待たされる。

/etc/ssh/sshd_config
UseDNS no
/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から

  1. File > Load private key > id_rsa.ppkを指定
  2. 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
  • 最終更新: 2022-12-15 20:48
  • by nabium