sshでパスワードを省略してログインする

sshWeb開発

機械学習やWeb開発をしていると、サーバーなどでSSH経由でログインして作業をする場合が多いかと思います。
その際に、特に設定を行わなければ、パスワードを毎回打つ必要があります。

簡単なパスワードにしてしまうと、セキュリティレベルが落ちてしまうし、難しいものだと毎回入力するのが難しいです。

今回は、SSHでパスワードを打たずに、公開鍵認証でログインする方法を解説します。

実行環境はMacを前提に進めていきます。

SSHのRSAキーを発行

まずは、SSHに使うための公開鍵と秘密鍵を生成します。

以下のコマンドで、鍵のペアを作ることが出来ます。
パスフレーズを打つときは、何も表示されませんが、ちゃんと入力できています。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa): [ここにキーのファイル名を入れる]
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase): [ここにキーのパスフレーズを入れる]
Enter same passphrase again: [確認のため、もう一度キーのパスフレーズを入れる]
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:

次にconfigの設定を行います。
お好きなエデュターで~/.ssh/configを開き、以下の内容を追加します。

Host [IPアドレス]
    HostName [IPアドレス]
    IdentityFile ~/.ssh/id_rsa
    User [ユーザーネーム]
    UseKeychain yes
    AddKeysToAgent yes

Macの場合、UseKeychainyesにすることで、ssh接続時に認証に使用した鍵がKeychainに保存され、パスワードの自動入力を行ってくれます。
AddKeysToAgentyesにすることで、ssh接続時に認証に使用した鍵がssh-agentに保存されます。

サーバー側に公開鍵を共有

ここからはサーバー側の作業を行います。
まずは、ホームディレクトリに.sshフォルダを作成します。

$ ssh [ユーザーネーム]@[IPアドレス] mkdir -p .ssh

次に先ぼどローカル環境で作成した公開鍵をサーバー側に共有します。

$ cat .ssh/id_rsa.pub | ssh [ユーザーネーム]@[IPアドレス] 'cat >> .ssh/authorized_keys'

ここで、一旦sshログインできるか確認しましょう。
Macであれば、configの設定が終わっていれば、パスワードは一度入力すれば、それ以降は必要ないはずです。

$ ssh  [ユーザーネーム]@[IPアドレス]

ssh-agentに登録(Mac以外)

Macの場合は、Keychainを利用してパスワードを自動入力できますが、それ以外のOSではssh-agentを利用する必要があります。

このままではログインする際に、秘密鍵のパスコードを毎回確認されます。
それを回避するために、ssh-agentを用いてパスコードを入力を代替させます。

まずは、ssh-agentを起動します。

$ eval `ssh-agent -s`

次にssh-agentに先ほど作成した秘密鍵を登録します。

$ ssh-add ~/.ssh/id_rsa_key
Enter passphrase for /home/user/.ssh/id_rsa_key:  
Identity added: /home/user/.ssh/id_rsa_key
(/home/user/.ssh/id_rsa_key)

登録されたことは、以下のコマンドを利用して確認できます。

$ ssh-add -l
2048 55:96:1a:b1:31:f6:f0:6f:d8:a7:49:1a:e5:4c:94:6f
/home/user/.ssh/id_rsa_key (RSA)

ここで、一旦パスワードなしでsshログインできるか確認しましょう。

$ ssh  [ユーザーネーム]@[IPアドレス]

VSCodeの設定

VisualStudio Codeの設定も行いましょう。
今回は、SFTP拡張機能を利用していることを想定します。

Shift + Command + P>sftpで設定ファイルを作成します。
以下の内容を、ご自身の環境に合わせて入力します。

{
    "name": "TestServer",
    "username": "[ユーザー名]",
    "host": "[IPアドレス]",
    "protocol": "sftp",
    "port": 22,
    "remotePath": "/home/username/test",
    "ignore": [
        "data/**",
        ".vscode/**",
        ".DS_Store",
        ".git/**"
    ],
    "sshConfigPath": "/Users/username/.ssh/config",
    "privateKeyPath": "/Users/username/.ssh/id_rsa",
    "passphrase": "*******"
}

privateKeyPathに秘密鍵の場所をして、passphrase(passwordではない)に秘密鍵のパスフレーズを入力しておきます。
この設定ファイルには、秘密鍵のパスフレーズが含まれているので、GitHubなどで公開しないように注意しましょう。

以上で、通常通りVSCodeでSFTPの機能を利用できます。

まとめ

いかがでしたでしょうか。

Macでの設定は、知っていれば簡単ですが、知らないと勝手が違い少し悩みました。
皆さんのお役に立てれば幸いです!

コメント

タイトルとURLをコピーしました