ssh
SSH の鍵認証がうまくいかない時
~/のパーミッションも group や other に書き込み権限を与えているとエラーになる。(参考: http://deved.exblog.jp/5583470/)
接続が切れないようにする
- クライアント側の設定。OpenSSH の場合、 ~/.ssh/config に以下の行を追加。 ~/.ssh/config がない場合は、新たに作成。新たに作成した場合は、$ chmod 0600 config というコマンドを実行し、ファイルの所有者のみがアクセスできるようにする。そうしないと、ssh コマンド実行時に、Bad owner or permissions on /home/username/.ssh/config というエラーメッセージがでる。
ServerAliveInterval 60
X をフォワードする
- ssh で -X オプションを付けなくても X が立ち上がるようにログインするには、/etc/ssh/ssh_config ファイルを以下のように変更する。
# ForwardX11 no ↓ ForwardX11 yes
root 権限がない場合 (su コマンドのパスワードがわからない場合、または sudo コマンドが使えない場合)、 ホームにある .ssh ディレクトリ (~/.ssh) に config というファイルを追加し 'ForwardX11 yes' と書く。パーミッションは rw-------。実際には、以下のコマンドを実行すれば良い。
$ echo 'ForwardX11 yes' >> $HOME/.ssh/config $ chmod 600 $HOME/.ssh/config
ポートフォワーディング
$ ssh username_on_stepping-stone@stepping-stone -L 10022:pc_in_lan:22 -NTf $ ssh -p 10022 username_on_pc_in_lan@localhost
ssh秘密鍵の変換
- OpenSSH 形式の秘密鍵 → PuTTY 形式の秘密鍵(拡張子: .ppk)
- OpenSSH の秘密鍵 (例えば、ファイル名 : id_rsa) を PuTTY で読める形式 (例えば、ファイル名 : id_rsa.ppk) に変換するには、puttygen.exe というプログラムを以下のサイトからダウンロードして実行。
PuTTY Download - Windows on Intel x86 PuTTYgen: puttygen.exe をダウンロード
PuTTYgen 起動 > Conversions > Import key
- OpenSSH の秘密鍵 id_rsa を開く
- Save private key ボタンを押す
- id_rsa.ppk として保存
- PuTTY からロードする場合は、以下の場所に id_rsa.ppk ファイルを指定する。
Category: > Connection > SSH > Auth > Private key file for athentication:
- OpenSSH の秘密鍵 (例えば、ファイル名 : id_rsa) を PuTTY で読める形式 (例えば、ファイル名 : id_rsa.ppk) に変換するには、puttygen.exe というプログラムを以下のサイトからダウンロードして実行。
ssh秘密鍵のパスフレーズ変更
- 注) 秘密鍵のパスフレーズを変更しても、公開鍵は変えなくて良い。即ち、秘密鍵のパスフレーズを変更した後も、ログイン先に送った公開鍵はそのまま使える。
- OpenSSH の場合
$ ssh-keygen -p
- ssh2 の場合
$ ssh-keygen -e /home/username/.ssh2/id_rsa_2048_a パスフレーズ変更を含めた編集(-e オプション)を対話的に行う .
- パスフレーズを空に設定すれば、他のPCへのログイン時にパスフレーズを入力しないでログイン出来るが、セキュリティ上よろしくないかも?パスフレーズ入力の省略は、ssh-agentや、keychainを使うのが正しいか。
- 以下実際に変更した際の入出力の例
- OpenSSH の場合
[koba@he ~]$ # バージョン確認 [koba@he ~]$ ssh -V 脆弱性のないバージョンか確認 [koba@he ~]$ # パスフレーズ変更 [koba@he ~]$ ssh-keygen -p Enter file in which the key is (/home/koba/.ssh/id_rsa): Enter old passphrase: Key has comment '/home/koba/.ssh/id_rsa' Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.
- ssh2 の場合
bash-2.05$ # バージョン確認 bash-2.05$ ssh -V 脆弱性のないバージョンか確認 bash-2.05$ # パスフレーズ変更 bash-2.05$ ssh-keygen -e /home/koba/.ssh2/id_rsa_2048_a Passphrase needed for key "2048-bit rsa, koba@mg.nucl.ap.titech.ac.jp, Fri Aug 21 2009 16:17:58 +0900". Passphrase : Do you want to edit key "2048-bit rsa, koba@mg.nucl.ap.titech.ac.jp, Fri Sep 21 2326 16:17:58 +0900" (yes or no)? yes Your key comment is "2048-bit rsa, koba@mg.nucl.ap.titech.ac.jp, Fri Sep 21 2326 16:17:58 +0900". Do you want to edit it (yes or no)? no Do you want to edit passphrase (yes or no)? yes New passphrase : Again : Do you want to continue editing key "2048-bit rsa, koba@mg.nucl.ap.titech.ac.jp, Fri Sep 21 2326 16:17:58 +0900" (yes or no)? no Do you want to save key "2048-bit rsa, koba@mg.nucl.ap.titech.ac.jp, Fri Sep 21 2326 16:17:58 +0900" to file id_rsa_2048_a (yes or no)? yes
理研の ribf00 を経由した ポートフォワーディング
- 例えば、理研ネットーワーク内の ribfdata02 上にあるデータを 東大 NEX ネットワーク内の解析 PC (nexfs)に直接コピーしたい場合、2 つのサーバ (ribf00 と nexgw) を経由しているため、ポートフォワーディングを行う必要がある。具体的には、以下のような手順になる。
- まず NEX ネットワーク内から nexfs に入る(下記コマンド参照)。
$ ssh kobayashi@nexfs
- ribf00 用の秘密鍵と公開鍵を $HOME/.ssh ディレクトリに置き、パーミッションを正しく設定する。
nexfs:~ kobayashi$ cd .ssh nexfs:.ssh kobayashi$ ls -l ... -rw------- 1 kobayashi staff 1675 Dec 2 19:52 id_rsa -rw-r--r-- 1 kobayashi staff 381 Dec 2 19:52 id_rsa.pub ...
- ssh コマンドでポートフォワードを行う(下記参照)。これで、ribf00 を経由したトンネルができる。このとき、ribf00 にログインするための鍵認証のパスフレーズを聞かれる。下記コマンド例の nkobayas は ribf00 上のアカウント。コマンドを実行するディレクトリはどこでも良い。ポート番号 : 1234 は他の番号でも構わない。
nexfs:.ssh kobayashi$ ssh -fNL 1234:ribfdata02:22 nkobayas@ribf00.riken.jp
- 試しにトンネルを使ってみる(下記参照)。ローカルホストのポート番号 1234 にアクセスすると、ribf00 を経由し、ribfdata02 の ssh のポート(ポート番号: 22)に接続する。このとき、ribfdata02 にログインするための鍵認証のパスフレーズを聞かれる。下記コマンド例の nkobayas は ribfdata02 上のアカウント。このアカウントは、理研のシステムの場合、ribf00 と同じにアカウントになるはず。
nexfs:.ssh kobayashi$ ssh -p 1234 nkobayas@localhost ... [nkobayas@ribfdata02 ~]$ pwd /rarf/u/nkobayas [nkobayas@ribfdata02 ~]$ exit nexfs:.ssh kobayashi$
- nexfs のホームディレクトリに data ディレクトリを作り、scp コマンドで ribfdata02 上の day-one のデータをコピーする。注意:scp コマンドでポートを指定する場合、-p オプションではなく、-P オプションを用いる。
nexfs:.ssh kobayashi$ cd nexfs:~ kobayashi$ mkdir data nexfs:~ kobayashi$ cd data nexfs:data kobayashi$ scp -P 1234 nkobayas@localhost:/rarf/d/d01/dayone/dayone0001.ridf ./