パスワードを常に入力することなく、ssh経由でリモートにログインできるようにしたいのです。
次のコマンドを実行します。
ssh-keygen
ssh-copy-id user@Host
## or if your server uses custom port no:
ssh-copy-id "user@Host -p 1234"
キーがコピーされたら、通常どおりマシンにsshします。
ssh user@Host
これで、コマンドを実行した特定のマシンからパスワードを入力せずにログインできます。
not-marco@rinzwind-desktop:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa):
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo. |
|*B.+ . . |
|*=o . o . |
| = . = |
|. o S |
|E. |
| o |
| . |
| |
+-----------------+
not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password:
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
これは、すでにSSHを介してサーバーに正常に接続できることを前提としています。
パスワードを使用せずに自分を識別できるSSHキーペアを生成する必要があります。必要に応じて、パスコードでキーを保護することを選択できますが、これを空白のままにして、完全にパスワードなしのSSHアクセスを許可できます。
ssh-keygen
を実行してSSHキーペアを作成します。これにより、id_rsa
およびid_rsa.pub
ファイルが作成されます。 pub
ファイルはサーバー上で使用されるものであり、秘密キー(id_rsa
)はユーザーに残り、ユーザーを識別する方法です。ssh-copy-id user@server
を使用して公開キーをサーバーにコピーし、ユーザーをリモートユーザーに、サーバーをマシンのDNS名またはIPアドレスに置き換えます。 SSHパスワードの入力を求められ、パスワードを入力します。すべてが正常に完了すると、パスワードを必要とせずにssh user@server
を介してマシンにアクセスできます。次のコマンドを入力します。
ssh-keygen
押す Enter プロンプトが表示されるまでキー
ssh-copy-id -i root@ip_address
(一度ホストシステムのパスワードを要求します)
ssh root@ip_address
これで、パスワードなしでログインできるはずです。
私が通常これを行う方法は次のとおりです。
ssh-keygen -t rsa
(パスワードの入力を求められたら、空白のままにします)
次に:cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'
(これには、ターゲットホスト名のホームディレクトリに.sshフォルダーがあり、authorized_keysファイルが含まれている必要があります)
もちろん、ユーザー名を目的のユーザー名に、ホスト名を目的のホスト名またはIPアドレスに置き換えます
その後、あなたが慣れているように、そのボックスにSSHで接続します。
私は通常sshpass
を使用し、Sudo apt-get install sshpass
でインストールし、次のように使用します
sshpass -p 'password' ssh your_username@your_server
パスワード認証を無効にする
SSHサーバーを使用する多くの人が弱いパスワードを使用するため、多くのオンライン攻撃者はSSHサーバーを探し、パスワードをランダムに推測し始めます。攻撃者は1時間で数千のパスワードを試行し、十分な時間を与えられた最強のパスワードでさえ推測できます。推奨される解決策は、パスワードの代わりにSSHキーを使用することです。通常のSSHキーと同じくらい推測しにくいように、パスワードには634個のランダムな文字と数字を含める必要があります。 SSHキーを使用して常にコンピューターにログインできる場合は、パスワード認証を完全に無効にする必要があります。
パスワード認証を無効にすると、特別に承認したコンピューターからのみ接続できます。これにより、セキュリティが大幅に向上しますが、PCを事前承認せずに友人のPCから自分のコンピューターに接続したり、誤ってキーを削除したときに自分のラップトップから接続したりすることはできません。
特別な理由がない限り、パスワード認証を無効にすることをお勧めします。
パスワード認証を無効にするには、sshd_configファイルで次の行を探します。
#PasswordAuthentication yes
次のような行に置き換えます。
PasswordAuthentication no
ファイルを保存し、SSHサーバーを再起動したら、ログイン時にパスワードの入力を求められることはありません。
https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
このソリューションは、Windowsからsshを使用して、クラウドイメージを含むAWS Cloudおよび- GCEクラウド
最近、このソリューションを使用して、GCEに新しくデプロイされたvmイメージをリモートログインしました。
puttygen
puttygenダウンロードwinscp
winscpダウンロード秘密鍵を所有している場合:
puttygen
を開き、ロードボタンを押して、秘密鍵(*.pem
)ファイルを選択します。
秘密鍵を所有していない場合:
puttygen
を開き、(ソース1から、以下に示すリンク)
notepad
を使用)PuTTY Key Generatorの「OpenSSH authorized_keysファイルに貼り付けるための公開キー」セクションから公開キーデータをコピーし、authorized_keys
ファイルにキーデータを貼り付けます。
このファイルにテキストが1行しかないことを確認してください。
Authorized_keysファイルをリモートマシンのホームディレクトリにアップロードします。
.ssh
ディレクトリを作成します(存在しない場合)
authorized_keys
ファイルを.ssh
ディレクトリにコピーします。
(既存のauthorized_keys
ファイルが置き換えられます。これに注意してください)。
ファイルが存在する場合、単にこのファイルの内容を既存のファイルに追加します。
コマンドを実行して権限を設定します。
Sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
これで、毎回資格情報を入力しなくても、ssh
をリモートマシンに入力できます。
公開/秘密キーペアを作成し、新しく作成した公開キーを使用してログインする場合、パスワードを入力する必要はありません。キーリングおよび/またはsshエージェントの構成によっては、パスフレーズでキーを保護する必要がある場合があります。
これは多くの short howto sの1つです。生成された秘密鍵が秘密のままであることが、この方法の安全性にとって非常に重要です!誰とでも共有したり、いかなる場合でもアクセスを許可したりしないでください。
このコマンドは、~/.ssh/
にかなり強力なキーを生成します。
ssh-keygen -b 4096
~/.ssh/
には、id_rsa.pub
として公開キーがあります。そのコンテンツは、サーバーauthorized_keys
ファイルに追加する必要があります。これは、可搬メディア(ペンドライブ)を介してトランスポートするか、サーバーでパスワード認証をすぐに有効にしてからssh-copy-id ~/.ssh/id_rsa.pub username@server
を使用して再度無効にします。
(最初のステップで)パスフレーズでキーを保護することを選択した場合は、ssh-agent
またはUbuntuキーリングを使用して、そのパスワードをローカルに保護し、常に入力する必要がないようにすることができます。
アプリケーションssh
とscp
は、それぞれリモートログインとリモートコピー用であり、パスワードを入力せずにリモートホストと通信できます。これには、以下で説明するような認証手順に従う必要があります。クライアントとは、あなたが座っているマシンを意味し、サーバーとは、パスワードを与えずにログオンしたいマシンを意味します。認証手順の手順は次のとおりです。
$HOME/.ssh
のファイルに保存されます。$HOME/.ssh/authorized_keys
または$HOME/.ssh/authorized_keys2
に公開鍵ファイルの内容を追加します。認証プロトコルには3つの異なるタイプがあります。 ssh-keygenの実行時にタイプを指定します。
chmod 0700
を取る必要があります)とidentity.pub(公開鍵)。ssh-keygen -t rsa
を実行し、ファイルid_rsa
(秘密鍵)およびid_rsa.pub
(公開鍵)を作成します。ssh-keygen -t dsa
を実行し、ファイルid_dsa
(秘密鍵)およびid_dsa.pub
(公開鍵)を作成します。Ssh-keygenを実行するとき、デフォルトの回答(パスフレーズを与えないことを意味する)に依存できます。これにより、セットアップ全体が簡単になりますが、安全性も低下します。
ssh;のオプションで使用するキーのタイプを指定できます。 ssh -1
は、RSA1キー(プロトコルバージョン1)の使用を強制しますが、ssh -2
強制的にsshを試みるRSAまたはDSAキーのみ(プロトコルバージョン2)。以下の例では、RSA1およびを生成してインストールしますDSAキーを使用すると、柔軟性が向上します。次の行を使用して、.ssh
ディレクトリに構成ファイルを作成できます。
Protocol 1,2
これにより、sshはRSA1(プロトコルバージョン1)RSA/DSA(プロトコルバージョン2)の前の接続。
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote Host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote Host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"
鍵を生成するときにパスフレーズを使用しなかった場合は、これですべてです。 ssh $ remoteを実行して接続をテストし、パスワードを入力せずにログインできるかどうかを確認できます(オプションとして-1
または-2
をオプションとして使用する必要がある場合があります ssh)。もちろん、ログオンするマシンごとにこの手順を繰り返すことができます。
パスフレーズを使用した場合は、ssh-agent
プログラムを実行して特別なシェルを起動し、ssh-add
を実行してkey/passphrasesshd
との組み合わせ。詳細については、これらのプログラムのマニュアルページを参照してください。
ssh-no-password.sh
#!/bin/sh
# create ssh connections without giving a password
if [ $# -lt 1 ]; then
echo Usage: $0 username@remotehost
exit
fi
remote="$1" # 1st command-line argument is the user@remotehost address
this=$Host # name of client Host
# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
echo "just type RETURN for each question:" # no passphrase - unsecure!!
# generate RSA1, RSA and DSA keys:
echo; echo; echo
ssh-keygen
echo; echo; echo
ssh-keygen -t rsa
echo; echo; echo
ssh-keygen -t dsa
else
# we have $HOME/.ssh, but check that we have all types of
# keys (RSA1, RSA, DSA):
if [ ! -f $HOME/.ssh/identity ]; then
# generate RSA1 keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate RSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t rsa
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate DSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t dsa
fi
fi
cd $HOME/.ssh
if [ ! -f config ]; then
# make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
echo "Protocol 1,2" > config
fi
# copy public keys (all three types) to the destination Host:
echo; echo; echo
# create .ssh on remote Host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote Host:
echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"
echo; echo; echo
echo "try an ssh $remote"
コピー元: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html
追加するには:
Macにはデフォルトでssh-copy-id
がありません。自分でインストールする必要があります。
curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
chmod +x /usr/local/bin/ssh-copy-id
詳細はこちら: https://github.com/beautifulcode/ssh-copy-id-for-OSX
ポート転送を行った場合、コマンドは次のようになります。
ssh-copy-id "[email protected] -p 2222"
引用符が必要であることに注意してください。
IdentitiesOnlyをyesに設定しているため、ここですべての回答を読んだとしても、パスワードを入力する必要があると感じる人のために回答を追加したいと思います。そして、ここでの答えは、gitまたはserverのキーである複数のキーを管理する時間を大幅に節約できます。
キーを生成してサーバーにコピーした後:
ssh-keygen # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub [email protected]
うまくいかなかった。
次に、クライアントの~/.ssh/config
ファイルを確認しに行きました。一番下にこれがあります。
Host *
IdentitiesOnly yes
次に、これを上記に追加します。
Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something
ssh somename
と入力するだけでログインできます。
次に、お気に入りの名前を使用して複数のsshキーを追加できます。設定ファイルに上記の4行のような設定を追加するだけです。
ホストは、後でサーバーに接続するときに入力する名前です。 HostNameはサーバーのIPです。 Userは、サーバーにログインするユーザー名です。アイデンティティファイルは、生成したキーを保存するファイルです。