memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

sshでwindowsからLinuxのコマンドをパスワードなしで実行する方法

前職の先輩から「rshでLinux側のmakeコマンドを実行したい」という相談がありました。rコマンドはUnixで使ったことがあったので何とかなると思ってやり始めたものの、はまって大変でした。先輩がはまったのも良くわかります。で、結果的にはセキュリティを考慮してsshで代替することにしました。


以下、とりあえず手順をメモしておきます。*1

なおLinux側ではsshdが起動されていてポートも空いている状態とします*2。ちなみに私の環境はLinux側がFedoracore4でWindows側がXP SP2です。

Windowsにopensshを入れる*3

Windowsコマンドプロンプトを起動する

RSA鍵を作成する。

  • コマンドプロンプトで次のコマンドを入力する。いろいろと聞かれるがすべて「エンターキー」のみでよい。

ssh-keygen -t rsa

  • 公開鍵と秘密鍵ファイルが以下のフォルダに生成される。

c:\document and setting\username\.ssh\id_rsa秘密鍵
c:\document and setting\username\.ssh\id_rsa.pub ←公開鍵

  • id_rsa.pubをメモ帳で開き、その内容をコピーしておく(Ctrl-c)

■公開鍵をLinux側に登録する

  • Linuxにログインする(コマンドを実行するユーザでログインする)
  • ホームディレクトリ(ログイン直後の場所)で以下のコマンドを実行する。

mkdir .ssh *4

chmod 755 .ssh
cd .ssh
vi authorized_keys
先ほどコピーしておいた内容をここにペーストしてファイルを保存しviを終了する。*5


■接続テスト

ssh username@hostname ls ←hostnameはipアドレスでも可

  • すると以下のメッセージが表示されるのでyesと入力する。

The authenticity of host '192.168.1.xx (192.168.1.xx)' can't be established.
RSA key fingerprint is **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**.
Are you sure you want to continue connecting (yes/no)? yes

  • うまくいけば、usernameのホームディレクトリの内容がlsされるはず。
  • これ以降に「ssh username@hostname ls」と実行してもパスワードは聞かれない。

トラブルシューティング

  • Linux側のsshdの設定ファイル(/etc/ssh/sshd_config)によって動作が変わるかもしれません。私はデフォルトから修正していません。
  • ssh -v username@hostname ls と-vオプションをつけると詳細な情報が見れます。調査に使えると思います。

■その他

  • いったん開通してしまえば、Linxu側のコマンド実行だけでなく、WindowsからLinuxへのファイル転送にscpが使えます。

scp Window側のファイル名 username@hostname:ファイル名

  • ターミナルとしても使えます。

ssh username@hostname


■参考サイト

*1:以前、puttyRSA鍵認証によるパスワードなしログインを設定した覚えがあったのでできると踏んでいたのですが。。。うまくいかず。昨日は帰ったのが2時。

*2:WindowsからputtyなどでLinuxssh接続できる状態ということ

*3:Cygwinを入れても同じだと思います。Cygwinの場合はデフォルトではopensshがインストールされないのでココなどを参考にしてインストールしましょう。

*4:既に.sshが存在する場合で、特に以前の鍵情報が必要なければ(多くの人がそうだと思う)rm -rf .sshで削除した方がいいと思う

*5:もちろんvi以外のエディタでも結果は同じ。既にauthorized_keysが存在する場合は最後尾に追加する必要がある。