トップページ > コンテンツ > コンピュータ関連その他 > UNIXコマンド > ssh

ssh接続に向けた事前準備

接続元 ssh-keygen等で秘密鍵と公開鍵を作成する。該当の接続先にどの鍵を使うかを個別に設定したい場合等には/home/ユーザ名/.ssh/configを設定すると良い。
接続先 /home/ユーザ名/.ssh/authorized_keysに、接続元の公開鍵情報を登録する。
登録方法としては、直接authorized_keysを書き換えて秘密鍵情報を追記する方法やssh-copy-id(ローカルの~/.ssh/id_rsa.pubの内容をauthorized_keysに追記してくれる)等のコマンドを使用する方法がある。

なお、鍵の変換が必要な場合は下記を参考にすると良い。

ssh接続方法

ssh ユーザ名@接続先でアクセスする。
ログインしているユーザ名と同じ名前で接続する時は、ユーザ名@は省略可能。
使用する秘密鍵を指定する場合は-iオプションを利用する。
ユーザ指定は-o User=ユーザ名でも可能。

ssh接続しようとした際にWARNINGを表示した場合

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED
のエラーが出た場合には、接続先の鍵を変更した覚えが無ければ
サーバの成り済ましの可能性があるので注意。

ただし、サーバを置き換えていることが分かっている等、
信用できる接続先である場合は、
.ssh/known_hostsの該当部分(*)をエディタ直接削除する(非推奨)か
ssh-keygen -R ホスト名で該当ホストの情報をリセットすると良い。

(*)known_hostsが暗号化されていて、該当ホストが何行目か
分からない場合はssh-keygen -F ホスト名とする。

sshの接続先で実行したコマンドの結果をスクリプトで利用する

下記オプションが使える。
-n こちらのサイトに記載のあるように、while等のループで抜けてしまう問題を防ぐ
-o StrictHostKeyChecking=no 鍵認証で止まってしまう問題を防ぐ
-o ConnectTimeout タイムアウトを設定する
-o ProxyCommand プロキシ経由でつなぐ。踏み台等を挟む多段回sshで活用できる。(例:ssh -o ProxyComand='ssh %h:%p ユーザ名@踏み台ホスト名' ユーザ名@宛先ホスト名)

リモートで実行させる時のエスケープ等については、こちらのサイトも参考にしたい。

ポートフォワーディングする

ssl -L ローカルマシンのポート:転送先IP:転送先Port ユーザ名@経由するマシン
な感じでできる。

例えば、ローカルマシンでhttp://localhost:12345とした時に、
VirtualBoxのマシンのhttp://localhost:8080にフォワーディングしたい場合は以下。
ssh -L 12345:localhost:8080 test@192.168.56.XXX

sshのTCP接続を制御し、2回目以降の接続を早める

-o ControlMaster=auto ControlMasterを使う
-o ControlPersist=60s ControlMaster用のソケットファイルを削除する秒数を指定
-o ControlPath=/path/to/socketfile ソケットファイルの場所を指定

最終更新:2021年03月28日 12:11