Secure Shell とは?
- リモートで Linux などの Unix 系システムを操作するためのもの
- 昔は Secure でない Remote Shell (rsh) が使われていたが,簡単にパスワードを傍受できるので今は ssh しか使わない
- スパコンを使うときには ssh でリモートから操作するのが一般的
- 他の手段はないことはないが,あまり使われない
接続する
- OS X には OpenSSH と呼ばれる ssh クライアント&サーバーが標準で搭載されている
$ ssh -p PORT USER NAME@HOSTNAME
という形式で接続する.ポート番号とユーザー名,ホスト名はシステム管理者から与えられる.ポート番号が22番のときは省略可能
接続する
- 初回起動時には確認がある
The authenticity of host '172.16.xx.xx (172.16.xx.xx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?
-
RSA key fingerprint が正しいことを確認してから接続する
-
偽のサーバーに誘導されていないかを確認できる
-
一度接続すると
~/.ssh/known_hosts
に記録される -
もし,サーバーが変更されていないにもかかわらず警告が出た場合には接続してはならない!
-
以下の画面が表示されたときにはサーバー管理者に問い合わせる
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/hoge/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/hoge/.ssh/known_hosts:71
RSA host key for 172.16.xx.xxx has changed and you have requested strict checking.
Host key verification failed.
- 先ほどの画面が出た場合には Man In The Middle Attach (MITM Attach,中間者攻撃)が疑われる
- ~/.ssh/known_hostsを書き換えれば接続できるようになるが,原則としてやってはならない
- 自分が管理しているサーバーで,再インストールした場合など,なぜこの表示が出るのかを理解してない限り,続行してはならない
操作する
- 接続後はすべての操作がサーバー上で行われる
- ファイルなども手元にあるものは見れずサーバー上のものが見える
- ネットワークアクセスもサーバーから行われる
ネットワークのアクセス元を確認する.手元では
確認君にアクセスすると現在のIPが分
かる
$ w3m http://www.ugtop.com/spill.shtml
-
w3m
はターミナルで動くブラウザ- qを押すことで終了できる
切断する
- 切断は
exit
と打てば切断される - Control-zでサスペンドしていたプロセスは終了される
- ネットワークの不調などで切断されてしまった場合には,実行中のプロセスも一緒に終了されてしまうので注意
ファイルを転送する
- サーバーとのファイルの転送には
scp
を用いる -
cp
をssh
経由で接続できるようにしたもの
scp -P PORT LOCALPATH USERNAME@HOSTNAME:REMOTEPATH
scp -P PORT USERNAME@HOSTNAME:REMOTEPATH LOCALPATH
-
-P
が大文字であることに注意 - 送り先と送り元の両方をリモートとすることはできない
- フォルダの転送には
-r
を使う(-R
ではない) - 他はだいたい
cp
と使い方は同じ
公開鍵認証を使う
- SSHの認証方法にはいくつかある
- 通常はパスワード認証だが,パスワードは総当たり攻撃に弱く認証できる回数に制限を設けないと安全ではない
- 公開鍵認証を用いることで,総当たり攻撃では突破不可能な認証ができる
- パスワードを入力する必要もなくなる
公開鍵をつくる
- 鍵は
~/.ssh/id_rsa
に生成される - 既に存在する人はスキップして良い
$ ssh-keygen -t rsa -b 4096
Enter file in which to save the key (/home/HOGE/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
- 2行目が表示されたらそのままEnterを押してよい
- 3行目と4行目では鍵を暗号化するためのパスワードを入力する
- パスワードを必ず設定すること
公開鍵について
- 公開鍵と秘密鍵のペアが作成されている
-
~/.ssh/id_rsa
が秘密鍵 -
~/.ssh/id_rsa.pub
が公開鍵
-
- 秘密鍵は絶対に公開してはならない
- 万が一,漏れてしまった場合には,対応するすべての公開鍵を削除し,鍵を作り直す
公開鍵認証できるようにする
- サーバー側に公開鍵を設置することでログインできるようになる
- サーバー側の
~/.ssh/authorized_keys
というファイルに公開鍵を設置する-
~/.ssh/authorized_keys
には何行書いても良い
-
- サーバー側のPermissionを適切に設定する必要がある
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
公開鍵認証でログインしてみる
- いつも通りログインしてみる
- もし,
USERNAME@HOSTNAME's password:
と表示され,パスワードが聞かれ
た場合には設定がうまくいっていない -
Enter passphrase for key '/Users/HOGE/.ssh/id_rsa':
のようにパスワードを聞かれるか,ターミナルとは別にパスワード入力画面が開いた場合にはうまくいっている(OS Xの場合) - OS X の場合にはパスワードをキーチェーンに記憶させれば,パスワードなしでログインできる
- キーチェーンはログインパスワードで暗号化されているので,パソコンを盗まれてもすぐには漏れない(パスワードを突破されるまで)
ショートカットを用意する
- 毎回接続に必要なオプションをコマンドからすべて設定するは面倒なので,
あらかじめ設定ファイルに書いておくことでショートカットができる - 設定ファイルはローカルの
~/.ssh/config
にある- ローカルで
chmod 600 ~/.ssh/config
を実行し,Permissionを適切に設定する
- ローカルで
Host SHORTCUT_NAME
HostName HOSTNAME
Port PORTNUMBER
user USERNAME
SHORTCUT_NAME, HOSTNAME, PORTNUMBER, USERNAME は適切な文字列に置き換える
ショートカットを用意する
- 設定をすると以下のコマンドで接続できるようになる
$ ssh SHORTCUT_NAME
- 頻繁に接続するホストは
~/.ssh/config
に並べておくと良い - コマンドで入力するには面倒なオプションもsshにはいろいろあるが,全部並べておくと楽になる
-
scp
でも利用可能で,ここでポート番号を設定しておけば-P
は不要
フォルダを転送する
-
scp
ではフォルダ転送ができなかったので,rsync
を使う -
rsync
は差分を検出し,変更があったところだけ転送してくれる
$ rsync -av SHORTCUT_NAME:REMOTEPATH LOCALPATH
$ rsync -av LOCALPATH SHORTCUT_NAME:REMOTEPATH
- オプションを変更することでいろいろ設定できるが,ここでは一部だけ説明する
-
-a
はフォルダ構造をまるごと転送する.変更日時などもすべてコピーされる -
-v
でファイル単位の,-P
で詳細な進捗を表示
-
フォルダを転送する
-
rsync
はリモートのサーバーにもインストールされている必要がある -
rsync
にSSHのオプションを渡すことは,-e
でできなくはないが,ショートカット名を設定しておくのがよい
接続を切断しても作業が中断しないようにする
- SSHは通常は接続が切れると,実行中のコマンドが終了されてしまう
- SSHが切れた後も実行し続けられるようにするためには
screen
やtmux
を使うとよい-
nohup
もあるが私は使わない
-
-
tmux
はどこでも入っているコマンドではないが,便利なので紹介する
tmux の使い方 1
- おすすめの設定ファイルを
Gist
からダウンロードしていることを前提として説明する
tmux の使い方 2
- tmux を立ち上げるためには
tmux
と打つ - tmux を操作するためにはControl-zを使う
- 本来のControl-zを使いたい場合にはControl-z zと入力する
一時的切断
-
C-z dで一時的に切断できる
- このあとログアウトしても良い
- 再接続には
tmux attach
とする- 作業を中断したところで再開される
- 接続元が変わっていても良い
- 私の設定ファイルを利用している場合には
t
だけでOK
tmux の使い方 3
タブを増やす
-
C-z c でタブを増やせる
- C-z pとC-z nでタブの切り替えができる
- 直前まで使っていたタブに移動するときにはC-z C-z
画面を分割する
- C-z %で画面を横に分割できる
- C-z "で縦に分割できる
- C-oで分割したパネルの間のカーソルを移動する
tmux の使い方 4
終了する
-
exit
ですべてのパネルを閉じれば終了する -
tmux ls
で実行中のtmux
を確認できる
スクロールする
- C-z [でスクロールモードに入る
- C-v, Alt-vでスクロールできる
- Emacsと同じ要領で検索したり,コピーしたりできる
- qでスクロールモードを抜ける
- ペーストはスクロールモードの外でC-z ]
まとめ
- SSH はリモートサーバーにログインするために使われる
-
~/.ssh/config
に設定を書いておくことで楽ができる - ファイル単位の転送には
scp
を,フォルダを丸ごとではrsync
を使う -
tmux
を用いることで接続を切断しても,途中から再開できる