パスワードを使用してSudoを使用し、SSH経由でファイルに添付する

パスワードを使用してSudoを使用し、SSH経由でファイルに添付する

私がしたいことは次のとおりです。

リモートホストにSSHで接続します。

ログインしたユーザーのAuthorized_keysファイルにあるpublic_keysを、すべてのユーザーの.ssh/authorized_keysファイルに追加します。

1行にパスワードを使用してsudo&catを試すのに問題があります。この問題を解決する方法を知っている人はいますか?

私がこれを達成するために努力する方法の一つです。

ssh -t $userHost -p $remotePort \
"for localUser in $(ls /home | grep -v $USER); \ 
do sudo mkdir -p /home/$localUser/.ssh && \
cat /home/$USER/.ssh/authorized_keys | sudo tee --append \
/home/$localUser/.ssh/authorized_keys > /dev/null; done"

しかし、sudoコマンドはsshコマンドでは機能しないようです。 sudoers ファイルの NOPASSWD はオプションではありません。

答え1

sudoパスワードを使用するには、ttyリモートコマンドの実行は割り当てられませんtty。したがって、許可しないと機能しませんNOPASSWD

代わりに、スクリプトをシェルとして使用し、コマンドを実行するスクリプトを使用してリモートサーバーに強制アカウントを持つことを検討してください。キーベース認証を使用して強制アカウントにログインすると、パスワードを2回入力せずにスクリプトを自動的に実行できます。スクリプトの最後の行からexitログアウトコマンドを実行します。これは基本的に対話型セッションなので、ttyパスワードを入力でき、入力する必要があるキーストロークの数は変わりません。

私が知らないsudoの新機能がなければ、他の方法は考えられません。

答え2

これが私が解決した方法です。

#!/bin/bash

userHost="[email protected]"
remotePort="1234"
password="password"

# Send public key to remote host
echo "Sending public key to remote host..."
cat "$HOME/.ssh/id_rsa.pub" | ssh $userHost \ 
-p $remotePort "cat >> ~/.ssh/authorized_keys"

# Add the public key to all users on the remote system
ssh $userHost -p $remotePort 'echo '"$password"' | sudo -S \
ls /home/ && for localUser in $(ls /home | grep -v $USER); \
do sudo mkdir -p /home/$localUser/.ssh && \
sudo touch /home/$localUser/.ssh/authorized_keys && \
sudo chown "$localUser:$localUser" /home/$localUser/.ssh/authorized_keys && \
cat /home/$USER/.ssh/authorized_keys | sudo tee \
--append /home/$localUser/.ssh/authorized_keys > /dev/null; done'

echo '"$password"' | sudo -S ls /home/まず、標準入力から読み取り、リモートホストのパスワードをキャッシュするためにガベージコマンドを使用しました。その後、残りのsudoコマンドを実行し続けます。

非常に混乱しているオネライナーですが、とにかくこのスクリプトはリモートホストごとに一度だけ実行するように設計されています。

SSHパスワードを2回入力する必要があるという事実は気に入りません。 1つ目は変数に保存し、2つ目はリモートホストへの最初のログインを続行します。

関連情報