ヘルプを探ってるとvimからSSH/SCP接続出来ることを知ったので、試してみた。
- クライアントPC
- Windows XP + vim 7.3.393(Kaoriya版)
- サーバーPC
- Ubuntu 11.10
で確認。「サーバー側にvim入れてSSHクライアント上で動かせば良いんじゃね?」という突っ込みは禁止www
サーバーPCにSSHサーバをインストール
サーバーPCのコマンドラインで
sudo apt-get install ssh
とする。別にOpen SSHなどでも構わない。
クライアントPCにSSHクライアントをインストール
SSHクライアントはPuTTY 0.60 ごった煮版 2007年8月6日版を使用した。
ダウンロードはPuTTY ごった煮版から行う。
本家の方がバージョンは新しい。Windows 7で使う ならこちらの方がいいかも。
インストールする場合にはデフォルトのフォルダではなくC:\PuTTy
などの空白を含まないパスにインストール
することを推奨(理由は後述)
$MYVIMRCを編集
$MYVIMRC(ユーザーvimファイル。一般的には$HOME/_vimrc
や$HOME/.vimrc
など)を編集し、以下の記述を追
加(sftpは不要かな?)。
文字列を’”‘(ダブルクォーテーション)で括ってあるのは試してる際にそうすると何故か動き出したからだが、 今試すと”’“(シングルクォーテーション)で括っても動くことが判明したので特に意味無しかも1。
実行ファイルのパスに空白が入ってると上手く動かない。(ダブルクォーテーションで括っても駄目。
g:netrw_list_cmd
を直接指定すると、最初のファイル一覧は取得できる)
既にPuTTyを空白の入ったフォルダ(C:\Program Files\PuTTy
など)にインストールしてしまってる人は
- 空白の入らないフォルダ(
C:\PuTTy
など)に再インストール - PuTTyのあるインストールフォルダにPATHを通して、
g:netrw_scp_cmd
などに実行ファイル名のみ指定 - 空白の入らないフォルダにジャンクション/シンボリックリンクする
- 空白の入らないフォルダにPuTTyフォルダの中身をコピーする
のうちお好きなのをどうぞ。
SSH接続を公開鍵認証に変更
このままだとSCP/SSH接続しようとした際にユーザー名/パスワード入力の部分で止まる(vimからプロンプトが出 ない)。
そこで、公開鍵認証+pageantでパスワード認証を自動化する(サーバーが1つしかないならplink.exeに-pwオプ ション付けとくというのでもいいけど)。
具体的な設定方法は公開鍵認証でsshを安全に使うを参照。
上記のサイトを読めばちゃんと書いてあるが、公開鍵をサーバーに設置する際[公開鍵の保存]ボタンで保 存したファイルを使っちゃ駄目です。PuTTy鍵生成ダイアログ上部のテキストを貼り付けませう←ここで少し 嵌まった。
上記サイトでは/etc/ssh/sshd_config
の編集方法があまり詳しく載ってないので補完しておくと(大体分かると思うけど)
33行目の”#”を外す
AuthorizedKeysFile %h/.ssh/authorized_keys
パスワード認証を無効化するには55行目のコメントを外してyes→no
PasswordAuthentication no
としてサーバー上で
/etc/init.d/ssh restart
とすれば設定が有効化します。
pageantで作った秘密鍵を追加しとくのを忘れずに。
使い方
クライアント上のvimで
:e scp://user@192.168.0.4/
とかするとサーバーのuserホームディレクトリの内容がダーっと表示されます。scpのパスは
scp://[user@]machine[[:#]port]/path
と指定できるみたいです。(pathの末尾が”/”だとディレクトリを意味する)
但しpathは指定したuserのホームディレクトリからの相対パスになるので、絶対パスにしたい場合は
:e scp://root@192.168.0.4//etc/ssh/
とか
:e scp://root@192.168.0.4//etc/ssh/sshd_config
みたいに先頭に”/”を付けます。
あと詳しい使い方はvimで
:h netrw
参照。
感想
別件でやりたいことがあって調べてた際に見つけて試してみたけど、vimって色んな事が出来ることを再認識。
ディレクトリ移動とかは1回ずつSSH接続しに行くみたいなので、動作はかなりもっさりしている。
サーバーにvimを入れられない環境なら便利かもしれないが、自宅で使う場合はサーバー側にvim入れちゃった方 が速くてスマート。
-
実行ファイルのパスに空白が入ってるときは’”’で括らないと駄目。とかそういうことなのかも↩