su
or sudo
またはを実行するCシェルプログラムを作成していssh
ます。彼らはすべて、stdinやコマンドラインではなく、コンソール入力(TTY)でパスワードを必要としています。
誰かが解決策を知っていますか?
パスワードなしの設定sudo
はオプションではありません。
期待する オプションかもしれませんが、それは私の簡素化されたシステムには存在しません。
su
or sudo
またはを実行するCシェルプログラムを作成していssh
ます。彼らはすべて、stdinやコマンドラインではなく、コンソール入力(TTY)でパスワードを必要としています。
誰かが解決策を知っていますか?
パスワードなしの設定sudo
はオプションではありません。
期待する オプションかもしれませんが、それは私の簡素化されたシステムには存在しません。
回答:
sudoには、標準入力からパスワードを受け入れるための-Sオプションがあります。これがmanエントリです:
-S The -S (stdin) option causes sudo to read the password from
the standard input instead of the terminal device.
これにより、次のようなコマンドを実行できます。
echo myPassword | sudo -S ls /tmp
sshについては、その使用を自動化/スクリプト化しようと何度も試みましたが、成功しませんでした。プロンプトなしでパスワードをコマンドに渡す組み込みの方法はないようです。他の人が述べたように、「期待」ユーティリティはこのジレンマに対処することを目的としているようですが、最終的には、これを自動化しようとするときに正しい秘密鍵認証を設定することが正しい方法です。
nonroot:yourpassword@hostname.com
?もちろん、キー認証とキーマネージャを使用すれば、はるかに簡単です。
'cat pw | sudo -S <command>
、それ以降rm pw
。
nc -l 12345 | sudo -S <command>
。送信側; echo myPassord | nc <target> 12345
。これはパスワード処理の問題を解決するだけですが、おそらくより多くのオプションがあるマスターコンソールに移動します。
私が持っている:
ssh user@host bash -c "echo mypass | sudo -S mycommand"
私のために働く。
この問題の通常の解決策は、スーパーユーザーアクセスを必要とするタスクを実行するヘルパーアプリを設定することです:http : //en.wikipedia.org/wiki/Setuid
Sudoはオフラインで使用するためのものではありません。
後の編集:SSHは秘密鍵と公開鍵の認証で使用できます。秘密鍵にパスフレーズがない場合は、パスワードを要求せずにsshを使用できます。
これは、接続するターゲットホストに公開鍵/秘密鍵を設定することで実行できます。最初のステップは、次のコマンドを実行して、ローカルホストでスクリプトを実行しているユーザーのsshキーを生成することです。
ssh-keygen
Enter file in which to save the key (/home/myuser/.ssh/id_rsa): <Hit enter for default>
Overwrite (y/n)? y
次に、空白のパスワードを入力します。その後、接続するターゲットホストにSSHキーをコピーします。
ssh-copy-id <remote_user>@<other_host>
remote_user@other_host's password: <Enter remote user's password here>
sshキーを登録すると、ssh remote_user@other_host
ローカルホストからサイレントを実行できるようになります。
多分あなたはexpect
コマンドを使うことができますか?:
expect -c 'spawn ssh root@your-domain.com;expect password;send "your-password\n";interact
そのコマンドは自動的にパスワードを与えます。
(他の人が示唆するように)より良い選択がない場合、man socatが役立ちます:
(sleep 5; echo PASSWORD; sleep 5; echo ls; sleep 1) |
socat - EXEC:'ssh -l user server',pty,setsid,ctty
EXEC’utes an ssh session to server. Uses a pty for communication
between socat and ssh, makes it ssh’s controlling tty (ctty),
and makes this pty the owner of a new process group (setsid), so
ssh accepts the password from socat.
pty、setsid、cttyのすべての複雑さが必要であり、長くスリープする必要はないかもしれませんが、スリープする必要があります。echo = 0オプションも、sshのコマンドラインでリモートコマンドを渡すので、一見の価値があります。
su
ます。su
-S(stdin)オプションはありません。
公開鍵認証用にSSHを設定します。鍵のパスフレーズはありません。ネット上のたくさんのガイド。ログインするためにパスワードは必要ありません。その後、クライアントのホスト名に基づいてキーの接続を制限できます。適切なセキュリティを提供し、自動ログインに最適です。
同じ問題がありました。リモートPCにディレクトリを作成するダイアログスクリプト。sshとの対話は簡単です。私はsshpass(以前にインストールされた)を使用しています。
dialog --inputbox "Enter IP" 8 78 2> /tmp/ip
IP=$(cat /tmp/ip)
dialog --inputbox "Please enter username" 8 78 2> /tmp/user
US=$(cat /tmp/user)
dialog --passwordbox "enter password for \"$US\" 8 78 2> /tmp/pass
PASSWORD = $(cat /tmp/pass)
sshpass -p "$PASSWORD" ssh $US@$IP mkdir -p /home/$US/TARGET-FOLDER
rm /tmp/ip
rm /tmp/user
rm /tmp/pass
ドイツからのご挨拶
タイタス
より良いsshpass
代替案は次のとおりです:https : passh
//github.com/clarkwang/passh
リモートサーバーにログインする
$ passh -p password ssh user@host
リモートサーバーでコマンドを実行する
$ passh -p password ssh user@host date
パスワードを渡す他の方法
-pパスワード(デフォルト: `password ')
-p env:env varからパスワードを読み取ります
-p file:ファイルからパスワードを読み取ります
ここでは、sshpassや他のソリューションよりも優れている理由を説明しました。
echo <password> | su -c <command> <user>
これは機能しています。
su
はありません。代わりにstdioからパスワードを読み取ります。
expectスクリプトでパスワードをハードコーディングすることは、パスワードなしのsudoを使用することと同じですが、sudoは少なくともコマンドをログに記録するため、実際にはさらに悪いことです。
1つの方法は、read -sオプションを使用することです。このようにして、パスワード文字が画面にエコーバックされません。私はいくつかのユースケースのために小さなスクリプトを書きました、そしてあなたは私のブログでそれを見ることができます:http : //www.datauniv.com/blogs/2013/02/21/a-quick-little-expect-script/
su -c "Command" < "Password"
お役に立てば幸いです。