LoginSignup
1
2

More than 3 years have passed since last update.

[Windows] SSHメモ

Last updated at Posted at 2020-07-11

環境:
- Windows10
- コマンドプロンプト

SSH時のパスワードの入力を省略する

おおまかな流れ

  • 移動前のサーバーで秘密鍵・公開鍵のペアを作成し,移動先のサーバーに公開鍵を登録
    • 移動先のサーバーのパスワードの代わりに,秘密鍵作成時に指定したパスフレーズで認証
    • (何かしらのパスワードを要求されるという意味では)変わらない
  • パスフレーズを毎回聞かれるのを避けるためにパスフレーズをssh-agentに登録
    • ssh-agentの登録状況はシェルが再起動する度にリセットされる
      • e.g. PuTTYのduplicate sessionでも
    • 結局毎回ssh-addをする羽目に
  • ssh-agentの登録情報を保持するためにkeychain導入

公開鍵認証によるログイン

移動元サーバーでの準備

公開鍵の作成

$ ssh-keygen

何も入力しないと,id_rsa,id_rsa.pubという2つのファイルが生成される.
ここで決めるパスフレーズを今後使って認証することになる.

  • id_rsaが秘密鍵(他には公開しない)
  • id_rsa.pubが公開鍵(他と共有する)

.pubがついている方を移動後サーバーに登録しておくことで,公開鍵認証ができるようになる.

~/.ssh/configでの設定

ssh時の設定を管理する~/.ssh/configを以下の通り編集.

Host ${ホスト名}
    HostName ${IPアドレス}
    User ${ユーザー名}
    IdentityFile ~/.ssh/id_rsa # 上の行程で作成した秘密鍵ファイルのパス

これで

$ ssh ${ホスト名}

をしたときに秘密鍵のパスが指定されるようになる(ssh ~~とコマンドラインで打って指定する方法もある).

移動先サーバーでの準備

~/.ssh/authorized_keysに移動元サーバーの公開鍵id_rsa.pubを追加
これで移動前サーバーの秘密鍵と移動先サーバーの公開鍵を照合して認証するようになる.

ここまでで出来るようになること

移動先サーバーのパスワードではなく,id_rsaの生成時に指定したパスフレーズを使って認証するようになる.
しかし,何かしらのパスワードが求められるという意味では手間は変わらない.

ssh-agentを使ったパスフレーズの記憶 (keychainを導入する場合スキップ可)

この問題を回避するために,ssh-agentに(秘密鍵認証に使う)パスフレーズを記憶させる.

$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa

Qiita@evakichi: SSH で毎回パスフレーズを入れるのが面倒だと思ったときには

しかし,ssh-agentの登録情報はシェルの再起動ごとにリセットされる.
例えば,PuTTYでSSH接続してssh-addをする→duplicate sessionで新しいウインドウを開いてもその情報を使えず,再度ssh-addする必要がある.

keychainの導入

情報系学生の備忘録: パスフレーズ入力回数を劇的に減らしてくれる「keychain」
が詳しい.しかし,インストール方法やURLが変更されているので注意.

最新の情報・ソースは,
GitHub: keychain
Keychain公式Wiki (上記ページからリンク)

インストール方法

  • 上記のGitHubからダウンロード
  • その中のkeychainにパスを通す (ビルドする必要もない)
    • 例えば~/local/bin/keychainにリンク,~/local/binを$PATHに
    • GitHubに書かれている"Please apply your patches to keychain.sh, not the generated keychain script"はkeychain開発者向け?
  • 上記公式Wikiの通り,.bash_profileに以下を追記
.bash_profile
eval `keychain --eval --agents ssh id_rsa`

これで起動する度に「ssh-agentを立ち上げてssh-addでパスフレーズを入力して…」という手間から解放される!

X11 Forwardingの設定

やるべきことは2つ:
- 転送されてきた画面を受けるDISPLAYを設定
- SSHの設定でX11 Forwardingを許可
- これは飛ばしてもssh -Y ${ホスト名}で出来るが,.ssh/configに設定を残しておくと-Yが不要に

本記事ではXmingを使用

DISPLAYの設定

以下でOK.cmd再起動してもDISPLAYの再設定は不要だった.

set DISPLAY=localhost:0.0

stackoverflow: Why does X-forwarding using ssh.exe work in cmd.exe but not Powershell?
上ページの質問者のコマンド参照.回答はPowershell用.

これで出来ること

  • ssh -Y ${ホスト名}で接続したサーバーで何か動かすと (e.g. Pythonで図を描画) Xming上で見られるようになる
  • ssh -X ${ホスト名}はダメだった.-Yの省略も不可.

Qiita@tama14142356: windows標準ssh(openssh)だけを用いてLinuxサーバから画面をX転送する。
この記事はPowershell用.

.ssh/configの設定で-Yオプションを省略

以下の3行を加えるとssh ${ホスト名}でX転送可能に.

ForwardX11Trusted yes
ForwardX11 yes
XAuthLocation /usr/pkg/bin/xauth

[comp] ssh -Y を ~/.ssh/ssh_config に設定

1
2
0

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
1
2