web-dev-qa-db-ja.com

パスワードなしのSSHログインを設定するにはどうすればよいですか?

パスワードを常に入力することなく、ssh経由でリモートにログインできるようにしたいのです。

  • どのように設定しますか?
  • パスワードなしのセッションを実行するには別のコマンドが必要ですか?
250
Oxwivi

回答

次のコマンドを実行します。

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アクセスを許可できます。

  1. 最初にssh-keygenを実行してSSHキーペアを作成します。これにより、id_rsaおよびid_rsa.pubファイルが作成されます。 pubファイルはサーバー上で使用されるものであり、秘密キー(id_rsa)はユーザーに残り、ユーザーを識別する方法です。
  2. 次に、ssh-copy-id user@serverを使用して公開キーをサーバーにコピーし、ユーザーをリモートユーザーに、サーバーをマシンのDNS名またはIPアドレスに置き換えます。 SSHパスワードの入力を求められ、パスワードを入力します。すべてが正常に完了すると、パスワードを必要とせずにssh user@serverを介してマシンにアクセスできます。

参照資料

262
Rinzwind

次のコマンドを入力します。

  1. ssh-keygen

    押す Enter プロンプトが表示されるまでキー

  2. ssh-copy-id -i root@ip_address

    (一度ホストシステムのパスワードを要求します)

  3. ssh root@ip_address

これで、パスワードなしでログインできるはずです。

34
Ravindra

私が通常これを行う方法は次のとおりです。

ssh-keygen -t rsa

(パスワードの入力を求められたら、空白のままにします)

次に:cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(これには、ターゲットホスト名のホームディレクトリに.sshフォルダーがあり、authorized_keysファイルが含まれている必要があります)

もちろん、ユーザー名を目的のユーザー名に、ホスト名を目的のホスト名またはIPアドレスに置き換えます

その後、あなたが慣れているように、そのボックスにSSHで接続します。

25
kyentei

私は通常sshpassを使用し、Sudo apt-get install sshpassでインストールし、次のように使用します

sshpass -p 'password' ssh your_username@your_server
18
Bruno Pereira

パスワード認証を無効にする

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

10
Thufir

このソリューションは、Windowsからsshを使用して、クラウドイメージを含むAWS Cloudおよび- GCEクラウド

免責事項

最近、このソリューションを使用して、GCEに新しくデプロイされたvmイメージをリモートログインしました。


使用したツール:

  1. puttygenputtygenダウンロード
  2. winscpwinscpダウンロード

実行する手順:

  1. Puttygenを使用して公開/秘密キーペアを生成します。
  2. クラウドまたはリモートロケーションのサーバーに公開キーをアップロードします。

どうやるか:

1.キー/ペアを生成するか、既存の秘密キーを使用します

秘密鍵を所有している場合:

puttygenを開き、ロードボタンを押して、秘密鍵(*.pem)ファイルを選択します。


秘密鍵を所有していない場合:

  • puttygenを開き、
  • Parametersセクション内で、目的のキータイプSSH2 DSA(RSAまたはDSAを使用できます)を選択します。パスフレーズフィールドを空白のままにすることが重要です。
  • 押す generate (公開/秘密)キーペアを生成する手順に従います。

Sample Key Generation pic

(ソース1から、以下に示すリンク)

2.新しい「authorized_keys」ファイルを作成します(notepadを使用)

PuTTY Key Generatorの「OpenSSH authorized_keysファイルに貼り付けるための公開キー」セクションから公開キーデータをコピーし、authorized_keysファイルにキーデータを貼り付けます。


このファイルにテキストが1行しかないことを確認してください。


3.キーをLinuxサーバーにアップロードします

  • WinSCPを開き、
  • SFTPファイルプロトコルを選択し、ssh資格情報でログインします。
  • 成功すると、リモートマシンにホームディレクトリ構造が表示されます。

Authorized_keysファイルをリモートマシンのホームディレクトリにアップロードします。


4.適切な許可を設定する

.sshディレクトリを作成します(存在しない場合)


authorized_keysファイルを.sshディレクトリにコピーします。
(既存のauthorized_keysファイルが置き換えられます。これに注意してください)。

ファイルが存在する場合、単にこのファイルの内容を既存のファイルに追加します。


コマンドを実行して権限を設定します。

Sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys

これで、毎回資格情報を入力しなくても、sshをリ​​モートマシンに入力できます。

参考文献:

9
devprashant

公開/秘密キーペアを作成し、新しく作成した公開キーを使用してログインする場合、パスワードを入力する必要はありません。キーリングおよび/または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キーリングを使用して、そのパスワードをローカルに保護し、常に入力する必要がないようにすることができます。

4
con-f-use

パスワードを与えずにリモートログイン/コピー

アプリケーションsshscpは、それぞれリモートログインとリモートコピー用であり、パスワードを入力せずにリモートホストと通信できます。これには、以下で説明するような認証手順に従う必要があります。クライアントとは、あなたが座っているマシンを意味し、サーバーとは、パスワードを与えずにログオンしたいマシンを意味します。認証手順の手順は次のとおりです。

  1. マシンで既に実行されていない限り、ssh-keygenを実行して秘密鍵と公開鍵を生成します。これらは$HOME/.sshのファイルに保存されます。
  2. サーバー上のファイル$HOME/.ssh/authorized_keysまたは$HOME/.ssh/authorized_keys2に公開鍵ファイルの内容を追加します。

認証プロトコルには3つの異なるタイプがあります。 ssh-keygenの実行時にタイプを指定します。

  1. SSHプロトコルバージョン1、RSA1:これはデフォルトの選択ですそして、ファイルID(秘密鍵、このファイルが他の人に読まれないようにするためにchmod 0700を取る必要があります)とidentity.pub(公開鍵)。
  2. SSHプロトコルバージョン1、RSA:これは取得されますssh-keygen -t rsaを実行し、ファイルid_rsa(秘密鍵)およびid_rsa.pub(公開鍵)を作成します。
  3. SSHプロトコルバージョン1、DSA:これは取得されます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

これにより、sshRSA1(プロトコルバージョン1)RSA/DSA(プロトコルバージョン2)の前の接続。

RSA1キーを使用する

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"

DSAキーの使用

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

3
αғsнιη

追加するには:

  • 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"
    

引用符が必要であることに注意してください。

3
samluthebrave

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は、サーバーにログインするユーザー名です。アイデンティティファイルは、生成したキーを保存するファイルです。

1
Lerner Zhang