パート 1: パスワードなしの SSH キー

パート 1: パスワードなしの SSH キー

SSH経由でリモートからソフトウェアのインストールを自動化できるようにマシンを構成する必要があります。ウィキ、SSH キーを設定して、ユーザーがパスワードなしでマシンにアクセスできるようにできましたが、 を使用するときには手動でパスワードを入力する必要がありますsudo。これは明らかに、自動化されたプロセスでは実行すべきではないことです。

/etc/ssh/sshd_configのには がありますがPermitRootLogin yes、別のパスワードを持つ「実際の」アカウントではないため、root としてログインできないようです。

プロセスが Ubuntu で root としてリモートログインできるように SSH キーを構成するにはどうすればよいですか?

答え1

パート 1: パスワードなしの SSH キー

ルートユーザー用のパスワードなしSSH接続を設定するには、サーバー上でルートアクセス権を持っている必要があります。最も簡単な方法は一時的にパスワードを使用して、root が SSH 経由でログインできるようにします。いずれにしても、これを行うにはサーバー上で root アクセスが必要です。サーバー上で root アクセスがない場合は、サーバー管理者に問い合わせてください。

クライアント側(SSH接続元)

まずパスワードなしのSSHキーを作成します。デフォルトのキーを使用するのではなく、名前を付けることを強くお勧めします。

ssh-keygen -f foo

-f オプションはファイル名を指定します。foo は例ですが、任意の名前を使用できます。

パスワードの入力を求められた場合は、Enter キーを押すだけで、パスワードなしのキーが生成されます。

次に、キーをサーバーに転送する必要があります。最も簡単な方法は を使用することですssh-copy-id。これを行うには、一時的に root がサーバーに ssh で接続できるようにする必要があります。

サーバー上(SSH接続先)

編集/etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

次の構文を使用して、rootにログインできることを確認してください。

PasswordAuthentication yes
PermitRootLogin yes

サーバーを再起動します

sudo service ssh restart

ルートパスワードを設定し、強力なパスワードを使用してください

sudo passwd

クライアント側:

クライアントからサーバーにキーを転送する

ssh-copy-id -i ~/.ssh/foo root@server

キーの名前を「foo」に変更し、求められたらサーバーのルート パスワードを入力します。

キーをテストする

ssh -i ~/.ssh/foo root@server

動作すると仮定して、ルート パスワードの設定を解除し、パスワード ログインを無効にします。

サーバー上:

sudo passwd -l root

編集/etc/ssh/sshd_config

sudo nano `/etc/ssh/sshd_config`

以下を変更します:

PasswordAuthentication no
PermitRootLogin without-password

サーバーを再起動します

sudo service ssh restart

クライアント側(テスト):

これで、パスワードなしでキーを使用して SSH 接続できるようになり、キーなしでは他のユーザーとして SSH 接続できなくなるはずです。

ssh -i ~/.ssh/foo root@server

パート2: パスワードを入力せずにsudo経由でコマンドを実行する

パスワードなしでコマンドを実行できるように sudo を設定します。

この質問に対する答えは、次の 2 か所にあります。

2 つのうち、すべてのコマンド (2 番目の回答) ではなく、できるだけ少ないコマンド (最初の回答) を許可することをお勧めします。

答え2

あなたは2つの異なることを混同しています:

パスワードなしのログは、パスワードを推測してリモートからシステムにログインできないようにするために使用されます。ユーザー名@マシンに ssh してパスワードなしで接続できる場合は、正しく設定されており、これ以外の問題はありません。

sudo通常のユーザーアカウントにスーパーユーザー権限で何かを実行することを許可するために使用されます。するユーザーにパスワードの入力を求めます。これは、リモート接続(パスワードなしまたはパスワード保護されたSSH経由)またはローカルマシンに接続しているかどうかに関係なく発生します。sudoパスワードを尋ねないように設定しようとしていますが、これは推奨されませんが、次のような回答からその方法を学ぶことができます。https://askubuntu.com/a/74083/6161

この回答を今後読む人への注意:

私の上記の回答は、元の投稿者の実際の質問に答えるものではなく、あなたが何を言いたいのかを説明しています。すべき代わりにやってください。本当にルートアカウントへの直接リモート接続を許可したい場合は、ルートアカウントを有効にする必要があります(下のコメントを参照してください)。もう一度言いますが、しないでくださいルート アカウントへのリモート ログインを許可します。

答え3

Q. パスワードなしの SSH を使用して、root ユーザーとしてリモート ホストにログインします (例: ssh root@remotehost_ip)

A. パスワードなしの SSH を使用して root ユーザーとしてリモート ホストにログインするには、以下の手順に従います。

ステップ1:
まず、ローカル ユーザーの公開キーをリモート ホストの root ユーザーの authorized_keys ファイルと共有する必要があります。これを行うにはさまざまな方法がありますが、ここでは 1 つの例を示します。

https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

または、公開キーの内容をリモート ホストのルート ユーザーの authorized_keys ファイルにコピーして貼り付けることもできます。

ステップ2:
リモート ホストでパスワードなしのログインを許可するように ssh を設定します。リモート ホストにログインし、/etc/ssh/sshd_config ファイルを編集して、ssh サービスを再起動します。「PermitRootLogin yes」をコメント アウトすることを忘れないでください。

#vim /etc/ssh/sshd_config
PermitRootLogin without-password
StrictModes no

#service ssh restart

#PermitRootLogin yes をコメントアウトします

ステップ3:
以前に公開キーを共有したユーザーを使用して、ローカル マシンから接続をテストします。

$ssh root@remotehost_ip

答え4

PermitRootLogin は、「root」という名前のユーザー (正確には、UID 0 を持つすべてのユーザー) がログインできるかどうかを制御します。root としてログインする場合は、sudo特権タスクを実行する必要はありません。

一方、ユーザーアカウントにログインしてsudoパスワードなしで使用する場合は、 をいじることなくsudoersファイルを設定する必要があります/etc/ssh/sshd_configUbuntu にパスワードを一度入力した後、永久に記憶させる方法

関連情報