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


252

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

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

opensshを使用していますか?(そうであればそれは簡単です;))
リンツウィンド

@ Rinzwind、OpenSSHが既にプリインストールされているのに、なぜプロプライエタリバージョンを取得するのが面倒なのでしょうか?
オックスウィビ

15
私はassuptionsを作らないように;)
Rinzwind

1
@ケビン、自分自身を明確にしてください。パスワードなしのssh-ingについて話していますが、これは一般的には良い習慣です。ルートシェルにsshするということですか?それはこの質問ではカバーされていません。
オックスウィビ

@Oxwivi:すみません、これはrootログインを対象としたRavindraの回答に対するコメントであるはずです。
ケビン

回答:


266

回答

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

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_rsaand id_rsa.pubファイルを作成します。pubファイルはサーバー上で何が起こっている、秘密鍵は、( id_rsa)あなたととどまり、あなた自身を特定する方法は何かということです。
  2. 次に、ssh-copy-id user@serverユーザーをリモートユーザーに置き換え、サーバーをマシンのDNS名またはIPアドレスに置き換えて、公開キーをサーバーにコピーします。SSHパスワードの入力を求められ、パスワードを入力します。すべてが正常に完了ssh user@serverすると、パスワードを必要とせずにマシンにアクセスできるようになります。

参照資料


11
@Oxwiviこの答えはそれを行うためのより正しい方法ですが、それはもっと長いようです。すべてを行う必要があるタイプでssh-keygen入力し、画面上の指示に従ってssh-copy-id user@serverリモートマシンを使用して、リモートユーザとサーバをユーザに置き換える
マルコケッピ

3
このエラーが発生しました。「エージェントは、キーを使用した署名の失敗を認めました。」この手順に従ってログインしようとするたびに。解決策は、ローカルマシンで「> ssh-add」を実行することでした。これで、期待どおりにリモートマシンにログインできます。
jmbouffard

1
@serverにカスタムポートを使用する必要がある場合は、これを行う必要があることに言及する価値がありますssh-copy-id "not-marco@127.0.0.1 -p 1234"
s3m3n

@Rinzwind:これは、passwd認証を無効にしてキー認証のみを許可すると、未知のクライアント/マシンからサーバーへの認証ができないことを意味しますか?既知/設定済みクライアントがサーバーと通信するために生成された秘密鍵を使用して、未知のマシンからのログインを許可する方法はありますか?つまり、この秘密鍵は持ち運び可能で、緊急時に必要な場合に他のマシンからサーバーへの認証に使用できますか?
ラジャトグプタ14

4
しかし、サーバーは、まだ,,,パスワードを要求される
ラーナー張

34

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

  1. ssh-keygen

    プレスEnterプロンプトを得るまでの鍵

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

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

  3. ssh root@ip_address

これで、パスワードなしでログインできるようになります。


25

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

ssh-keygen -t rsa

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

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

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

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

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


どの程度touchchmodRinzwindの答えでコマンド?
オックスウィビ

7
あなたは、chmodのする必要があります.ssh/authorized_keys0600にファイルをか、これは動作しません
マルコケッピ

これは本当に役立ちました。なぜなら、ssh-copy-idをサーバーのルートで機能させることができなかったからです。backuppc(または他のデーモン)が別のマシンにsshする必要がある状況では、rootでなければなりません。
アダム

18

私は通常そのために使用しsshpass、それをインストールしてsudo apt-get install sshpassこのように使用します

sshpass -p 'password' ssh your_username@your_server

6
sshキーを使用しない理由
enzotib

1
「なぜ」という状況ではなく、キーを追加しなくても完璧に機能します。
ブルーノペレイラ

sshpassに関する情報をありがとう、これまで聞いたことがない。
パンサー

7
SSHキーは質問に対する「正しい」回答sshpassですが、リモートサーバーで認証方法を変更できない場合には非常に便利なハックです。
ジェイコブクラール

9
これは、あなたがbash_historyまたは何あなたは接続先のホストのための平野パスワード...にしておこう、非常に危険である
カッパ

10

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

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


2
これは最も基本的な正解ですが、セキュリティには適しています!また、無効にrootログインは別の良いものです
FreeSoftwareServers

PasswordAuthentication noすべてのユーザーに影響を与えますか?そうでない場合、通常のユーザーに対してはどのようにオフにしますか?私は本当にそれをだまして完全にロックアウトしたくありません。
アダム

sshセッションを開いたままにして、元に戻すことができます。パスワードとルートを無効にします。はい、できます。してはいけません;)
Thufir

sshの実行中に、エラーが発生Permission denied (publickey).しましたPasswordAuthentication no。どうすればいいですか?PasswordAuthentication no別のホストで変更しますか?
-ParisaN

9

このソリューションは、Windowsを使用して、AWSクラウドおよびGCEクラウド上のクラウドイメージを含むリモートマシンにSSH接続するユーザー専用です。

免責事項

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


使用したツール:

  1. puttygen puttygenダウンロード
  2. winscp winscpダウンロード

実行する手順:

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

どうやるか:

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

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

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


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

  • オープンputtygen
  • [ パラメーター]セクションで、目的のキータイプSSH2 DSA(RSAまたはDSAを使用できます)を選択します。パスフレーズフィールドを空白のままにすることが重要です。
  • を押してgenerate、指示に従って(パブリック/プライベート)キーペアを生成します。

サンプル鍵生成の写真

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

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

PuTTYキージェネレーターの[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毎回資格情報を入力せずにリモートマシンにアクセスできるようになります。

参考文献:


4

公開/秘密キーペアを作成し、新しく作成した公開キーを使用してログインする場合、パスワードを入力する必要はありません。キーリングおよび/またはsshエージェントの構成によっては、パスフレーズでキーを保護する必要がある場合があります。

ここにあなたのための多くの短いハウツーの一つがあります。生成された秘密鍵が秘密のままであることが、この方法の安全性にとって非常に重要です!誰とでも共有したり、いかなる場合でもアクセスを許可したりしないでください。

このコマンドは、かなり強力なキーを生成します~/.ssh/

ssh-keygen -b 4096

~/.ssh/公開鍵がありid_rsa.pubます。その内容は、可authorized_keys搬メディア(ペンドライブ)を介してトランスポートするか、サーバーでパスワード認証をすぐに有効にしssh-copy-id ~/.ssh/id_rsa.pub username@serverてから使用し、再度無効にすることにより、サーバーファイルに追加する必要があります。

(最初のステップで)パスフレーズでキーを保護することを選択した場合ssh-agent、Ubuntuキーリングを使用してそのキーをローカルで保護することで、常に入力する必要がなくなります。


3

追加するには:

  • 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 "not-marco@127.0.0.1 -p 2222"
    

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


3

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

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

  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

これにより、sshはRSA / DSA(プロトコルバージョン2)の前にRSA1(プロトコルバージョン1)接続を試行します

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を実行して接続をテストし、パスワードを入力せずにログインできるかどうかを確認できます(sshを使用する-1-2、オプションとして使用する必要がある場合があります)。もちろん、ログオンしたいマシンに対してこの手順を繰り返すことができます。

パスフレーズを使用した場合は、プログラムssh-agentを実行して特別なシェルを起動し、続いssh-addキー/パスフレーズの組み合わせをに登録する必要がありますsshd。詳細については、これらのプログラムのマニュアルページを参照してください。

パスワードなしの接続を自動化するためのスクリプト: 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


1

IdentitiesOnlyをyesに設定しているため、ここですべての回答を読んだとしても、パスワードを入力する必要があると感じる人のために、回答を追加したいと思います。そして、ここでの答えは、gitまたはサーバーのキーである複数のキーを管理する時間を大幅に節約できます。

キーを生成してサーバーにコピーした後:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160

うまくいかなかった。

それから私は~/.ssh/configクライアントでファイルをチェックしに行きました、私はこれを一番下で見ました:

Host *
IdentitiesOnly yes

次に、これを上記に追加します。

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

と入力するだけでログインできますssh somename

次に、お気に入りの名前を使用して複数のsshキーを追加できます。設定ファイルに上記の4行のような設定を追加するだけです。

ホストは、後でサーバーに接続するときに入力する名前です。HostNameはサーバーのIPです。Userは、サーバーにログインするユーザー名です。アイデンティティファイルは、生成したキーを保存するファイルです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.