
ローカルコンピュータからリモートシステムでコマンドを実行する
シェルを開かずに、SSH 接続でリモート lubuntu 22.04 システムでコマンドを実行する必要があります。この命令はスクリプト内で実行されます。このスクリプトは、ローカル システム (別の Ubuntu ディストリビューションがインストールされている) で実行されます。ローカル システムで次のスクリプトを実行すると、正常に実行できることがわかりました。
# define a variable which stored the password
MYPASSWORD='mypassword'
sshpass -p $MYPASSWORD ssh [email protected] "cp /home/myuser/file1 /path/to/dest/"
私が使用したコマンド(ローカル システムにインストールされています)では、SSH セッションの認証に必要なsshpass
ユーザーのパスワードの入力を回避しています。myuser
私のニーズ
前と同じようにコマンドを実行する必要がありますcp
が、ファイルの保存先はサブフォルダーなので/etc
、sudo
権限が必要です。したがって、スクリプトは次のようになります。
MYPASSWORD='mypassword'
sshpass -p $MYPASSWORD ssh [email protected] "cp /home/myuser/file1 /path/to/dest/"
sshpass -p $MYPASSWORD ssh [email protected] "sudo -S cp /home/myuser/file1 /etc/sub/folder/"
スクリプトを実行すると、スクリプトの最後のコマンドによって次の要求が出力されます。
[sudo] password for myuser:
したがって、スクリプトは実行を停止し、sudo
パスワードを待機します。
そんなの欲しくないよ!
私の試み
次のコマンドを実行すると:
> echo mypassword | sudo -S -s cp /home/myuser/file1 /etc/sub/folder/
直接リモートシステムの端末でパスワードを尋ねることなく動作し、コピーされfile1
ます。/etc/sub/folder/
sudo
しかし、次のコマンドを実行すると私のローカルシステム上:
sshpass -p 'mypassword' ssh [email protected] "echo mypassword | sudo -S -s cp /home/myuser/file1 /etc/sub/folder/"
動作しません!
私の質問
キーボードによるパスワード入力を回避する方法はありますかsudo
?パスワードを自動送信することは可能ですか?
答え1
回避策/解決策を見つけました。
パスワードを一時的に保存するファイルを使用するsudo
以下に示すいくつかのコマンドを追加して、ローカル システムで実行されるスクリプトを変更しました。
- コマンドによってリモート システムのフォルダーにテキスト ファイルが作成されます
echo
。このファイルは と呼ばれ、ユーザー のpassword.txt
パスワード ( ) のみが含まれます。"mypassword"
myuser
- ファイルはオペレータによるコマンド
password.txt
への直接入力です。sudo
<
- コマンドの実行
sudo -S < /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/
- リモートシステムからファイル /home/myuser/password.txt を削除する
このソリューションは安全な開発環境で使用されるため、セキュリティ制約に違反することはありません。
新しい脚本
この指示により、ローカル システムで実行されるスクリプトは次のようになります。
MYPASSWORD='mypassword'
# creation of the file password.txt on the home folder of the remote system
sshpass -p $MYPASSWORD ssh [email protected] "echo $MYPASSWORD > /home/myuser/password.txt"
# execution of the command which needs the sudo privileges (on remote system)
sshpass -p $MYPASSWORD ssh [email protected] "sudo -S < /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/"
# The '<' directs file passowrd.txt as input to sudo ===========================
# deletion of the file password.txt
sshpass -p $MYPASSWORD ssh [email protected] rm /home/myuser/password.txt
出力を抑制するsudo -S
私は、SSH からローカル システムに送信される[sudo] password for myuser:
コマンドの出力 ( ) を抑制できる別の改善点を見つけました。以下に示すように、演算子とデバイス を使用するだけで十分です。sudo -S
&>
/dev/null
sshpass -p $MYPASSWORD ssh [email protected] "sudo -S \
< /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/" &> /dev/null
注記私のローカル システムでは、出力の抑制は[sudo] password for myuser:
次のリダイレクトによって機能します。
&>/dev/null
>&/dev/null
これは、前の演算子が同等であるため正常です(この郵便受けSuperUser でご覧ください。
抑圧動作しません次のリダイレクトによって:
>/dev/null