Locked History Actions

ssh

ssh

SSH の鍵認証がうまくいかない時

接続が切れないようにする

  • クライアント側の設定。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 というプログラムを以下のサイトからダウンロードして実行。
      1. PuTTY Download - Windows on Intel x86 PuTTYgen: puttygen.exe をダウンロード

      2. PuTTYgen 起動 > Conversions > Import key

      3. OpenSSH の秘密鍵 id_rsa を開く
      4. Save private key ボタンを押す
      5. id_rsa.ppk として保存
      6. PuTTY からロードする場合は、以下の場所に id_rsa.ppk ファイルを指定する。
        • Category: > Connection > SSH > Auth > Private key file for athentication:

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) を経由しているため、ポートフォワーディングを行う必要がある。具体的には、以下のような手順になる。
  1. まず NEX ネットワーク内から nexfs に入る(下記コマンド参照)。
    • $ ssh kobayashi@nexfs
  2. 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
      ...
  3. ssh コマンドでポートフォワードを行う(下記参照)。これで、ribf00 を経由したトンネルができる。このとき、ribf00 にログインするための鍵認証のパスフレーズを聞かれる。下記コマンド例の nkobayas は ribf00 上のアカウント。コマンドを実行するディレクトリはどこでも良い。ポート番号 : 1234 は他の番号でも構わない。
    • nexfs:.ssh kobayashi$ ssh -fNL 1234:ribfdata02:22 nkobayas@ribf00.riken.jp
  4. 試しにトンネルを使ってみる(下記参照)。ローカルホストのポート番号 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$
  5. 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 ./