SSHとは

えすえすえいち

ネットワークを通して別のコンピュータにログインし、コマンドを実行するための、通信を暗号化するプロトコル(およびそのコマンド)。サーバは標準でTCPの22番ポートで待ち受ける。認証にはパスワードのほか、公開鍵認証がよく使われ、手元の秘密鍵に対応する公開鍵をサーバの ~/.ssh/authorized_keys に登録しておく。同じ接続の上で、scp や rsync によるファイルの転送、ポートフォワーディングもできる。

「SSH」は、2分野の3問の練習問題に出てきます(Linuxとコマンドラインの基礎, ネットワークの基礎など)。

この用語の分野: Linuxとコマンドラインの基礎

公開鍵認証のしくみ

ssh-keygen で秘密鍵と公開鍵の組を作り、公開鍵(.pub のファイル)だけをサーバの authorized_keys に登録します。接続のとき、クライアントは秘密鍵で署名を作ってサーバに示し、サーバは登録された公開鍵でそれを確かめるので、秘密鍵そのものはネットワークに流れません。秘密鍵はパスフレーズで保護し、ssh-agent に預けておけば、接続のたびに入力する手間を減らせます。

サーバの確認

初めて接続するとき、ssh はサーバのホスト鍵の指紋(フィンガープリント)を示し、受け入れると ~/.ssh/known_hosts に記録します。次からは記録と違う鍵が示されると警告を出して止まるので、なりすましのサーバに気づけます。サーバを入れ替えたなどの理由がないのに警告が出たときは、そのまま接続を続けてはいけません。

設計の現場での使い方

EDAツールが動く計算サーバには、手元のPCから ssh でログインし、シミュレーションを投げたり結果を確かめたりします。~/.ssh/config にホストの別名、ユーザ名、鍵のファイル、踏み台のサーバ(ProxyJump)を書いておくと、ssh server1 だけで接続できます。画面を使うツールは、X11 フォワーディングやリモートデスクトップの仕組みと組み合わせて使います。

SSHの練習問題に挑戦

SSH で接続したサーバで、時間のかかる処理を「./run.sh &」で起動してから接続を切ったところ、処理も止まってしまった。接続を切った後も処理を続けさせる起動のしかたとして、最も適切なものはどれか。

  1. A./run.sh > run.log 2>&1 &
  2. Bnice -n 19 ./run.sh > run.log 2>&1 &
  3. Cnohup ./run.sh > run.log 2>&1 &
答えと解説を見る

正解:C. nohup ./run.sh > run.log 2>&1 &

接続が切れると、端末のハングアップを知らせる SIGHUP がシェルに送られ、bash などのシェルは自分のジョブにも SIGHUP を送ります。SIGHUP を受け取ったときの既定の動作は終了なので、バックグラウンドのジョブも止まります。nohup はコマンドが SIGHUP を無視するようにして起動し、出力をファイルに向けておけば、接続を切った後も処理が続きます。出力をリダイレクトせずに端末から起動すると、nohup は出力を nohup.out というファイルに書き込みます。tmux や screen のような端末多重化のソフトを使い、後で同じ画面につなぎ直す方法もよく使われます。

よくある質問

「Permission denied (publickey)」と表示されて接続できません。何を確かめますか?

サーバの ~/.ssh/authorized_keys に、使っている秘密鍵に対応する公開鍵が登録されているか、接続するユーザ名が正しいかを確かめます。サーバ側の ~/.ssh や authorized_keys の権限が緩すぎる(ほかの人が書き込める)と、安全のために鍵が使われないことがあるので、~/.ssh は 700、authorized_keys は 600 などにします。ssh -v を付けると、どの鍵を試したかが表示されます。

scp と rsync はどう使い分けますか?

どちらも ssh の上でファイルを転送できます。scp は単純なコピーに向き、rsync は転送先との差分だけを送るので、大きなディレクトリを繰り返し同期したり、途中で切れた転送をやり直したりするときに効率的です。rsync -av --delete のように使うと、転送先を転送元と同じ状態にそろえられますが、--delete は転送先にだけあるファイルを消すので注意が必要です。

解説の中の「SSH」

「SSH」が出てくる問題(3問)

  1. SSH で接続したサーバで、時間のかかる処理を「./run.sh &」で起動してから接続を切ったところ、処理も止まってしまった。接続を切った後も処理を続けさせる起動のしかたとして、最も適切なものはどれか。
  2. 手元のPCで ssh-keygen を使って公開鍵認証の鍵の組を作り、サーバ server1 にパスワードなしで ssh で接続できるようにしたい。鍵の置き方として、正しいものはどれか。
  3. プロトコルと、そのサーバが標準で使うポート番号の組み合わせとして正しいものはどれか。

Linuxとコマンドラインの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

シェル 入出力のリダイレクト ポート番号 HTTP DNS inode 環境変数 Git grep cron

用語集の一覧へ