[メモ] ssh でリモートログイン
ssh でリモートログインするときはパスワードを手打ちしていたけど、リモートでちょっと大規模なファイルの編集をする必要が出てきて、 Emacs の tramp をきちんと使いたくなったのでパスワードをいちいち打つのが面倒になってきた。
そこで、公開鍵と秘密鍵を設定してパスワードなしでログインできるようにした。
以下設定の手順:
1. 秘密鍵の作成
ローカルから
local$ ssh-keygen
と入力。
Enter file in which to save the key (/Users/dai/.ssh/id_rsa):
はそのままで Enter、
Enter passphrase (empty for no passphrase): Enter same passphrase again:
2. リモート側に公開鍵を設定
scp でリモートに鍵を転送して、 authorized_keys を設定する。
local$ scp ~/.ssh/id_rsa.pub user@www.host.com: local$ ssh user@www.host.com remote$ mv id_rsa.pub .ssh/authorized_keys remote$ chmod 600 .ssh/authorized_keys
でOK. ただし、 authorized_keys がすでに存在する場合 (すでに他のマシンからの公開鍵を設定している場合) は
remote$ cat id_rsa.pub >> ~/.ssh/authorized_keys remote$ rm id_rsa.pub
と追記する。以上でとりあえず終了。
local$ ssh www.host.com
でパスワードなしでいけるようになる。あ、 Mac の場合はキーチェーンアクセスがどうとか出てきた。
ホストに別名を付けたい場合や、複数リモートの設定をする場合はさらに以下を。
3. 複数リモートの設定を書く
2. までの手順リモートマシンごとにやる。 id_rsa ファイルは上書きされないように適宜名前を変えておく。
ローカルの ~/.ssh/config を開いて、
Host host1 HostName www.host1.com Port 22 User hoge IdentityFile ~/.ssh/id_rsa_host1 Host host2 HostName www.host2.com Port 22 User fuga IdentityFile ~/.ssh/id_rsa_host2
と記入する。これで、
local$ ssh host1
とすれば hoge@host1 に、
local$ ssh host2
とすれば fuga@host2 に ssh できるようになる。
4. .zshrc にホスト名を記述
.zshrc に
zstyle ':completion:*' users-hosts host1 host2
などと記述しておけば
$ ssh <TAB>
で補完してくれる。 user@ を前に付けてもいける。