su
またはsudo
またはを実行する C シェル プログラムを作成していssh
ます。彼らは皆、標準入力やコマンドラインではなく、コンソール入力 (TTY) でパスワードを求めています。
誰かが解決策を知っていますか?
パスワードなしの設定sudo
はオプションではありません。
期待はオプションかもしれませんが、私の簡素化されたシステムにはありません。
sudo には、標準入力からパスワードを受け入れるための -S オプションがあります。男性のエントリーは次のとおりです。
-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に関しては、その使用法を自動化/スクリプト化しようと何度も試みましたが、成功しませんでした。プロンプトを表示せずにパスワードをコマンドに渡す組み込みの方法はないようです。他の人が述べたように、「expect」ユーティリティはこのジレンマに対処することを目的としているように見えますが、最終的には、これを自動化しようとするときに正しい秘密鍵認証を設定することが正しい方法です。
ダイアログボックスでパスワードの入力を求める Applescript を作成し、次のようにカスタム bash コマンドを作成しました。
echo <password> | sudo -S <command>
これが役立つかどうかはわかりません。
sudo が事前に暗号化されたパスワードを受け入れると、スクリプト内でパスワードを暗号化でき、平文のパスワードがエコーされる心配がなくなります。ただし、これは私と私の状況で機能します。
をssh
使用できsshpass
ます。sshpass -p yourpassphrase ssh user@host
最初にsshpassをダウンロードするだけです:)
$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server
sudo の場合、これも実行できます。
sudo -S <<< "password" command
私が持っている:
ssh user@host bash -c "echo mypass | sudo -S mycommand"
私のために働きます。
この問題の通常の解決策は、スーパーユーザーアクセスを必要とするタスクを実行するヘルパーアプリをsetuidすることです: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 remote_user@other_host
ssh キーを登録すると、ローカル ホストからサイレント モードを実行できるようになります。
多分あなたはexpect
コマンドを使うことができますか?:
expect -c 'spawn ssh root@your-domain.com;expect password;send "your-password\n";interact
そのコマンドは、パスワードを自動的に提供します。
expect
Linuxユーティリティを見てください。
stdinでの単純なパターンマッチングに基づいて、出力をstdioに送信できます。
(他の人が示唆しているように)より良い選択がない場合、mansocatは次のことを支援できます。
(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の複雑さはすべて必要であり、長く眠る必要はないかもしれませんが、眠る必要があります。sshのコマンドラインでリモートコマンドを渡すのと同様に、echo=0オプションも一見の価値があります。
キーに言い回しを付けずに、SSHを公開キー認証用に設定します。ネット上のガイドの負荷。その場合、ログインするのにパスワードは必要ありません。次に、クライアントのホスト名に基づいてキーの接続を制限できます。妥当なセキュリティを提供し、自動ログインに最適です。
echo <password> | su -c <command> <user>
これは機能しています。
私も同じ問題を抱えていました。リモート 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
ドイツからのご挨拶
タイタス
1 つの方法は、read -s オプションを使用することです。この方法では、パスワード文字が画面にエコー バックされません。いくつかのユースケース用に小さなスクリプトを書きました。ブログで見ることができます: http://www.datauniv.com/blogs/2013/02/21/a-quick-little-expect-script/
使用する:
echo password | sudo command
例:
echo password | sudo apt-get update; whoami
それが役に立てば幸い..
スクリプトを期待するパラメータとしてパスワードを指定できます。
su -c "Command" < "Password"
お役に立てば幸いです。