LoginSignup
8
8

More than 5 years have passed since last update.

UNIX講習会#6 SSH編

Last updated at Posted at 2015-06-11

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を用いる
  • cpssh経由で接続できるようにしたもの
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が切れた後も実行し続けられるようにするためにはscreentmuxを使うとよい
    • nohupもあるが私は使わない
  • tmuxはどこでも入っているコマンドではないが,便利なので紹介する

tmux の使い方 1

  • おすすめの設定ファイルを Gist からダウンロードしていることを前提として説明する

tmux-1.png


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 pC-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を用いることで接続を切断しても,途中から再開できる
8
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8