2016-04-13 13 views
1

stackoverflowやインターネット上の他の多くの記事と同様の質問が出てくるでしょうか?しかし、私は自分の問題に対する解決策を正確に見つけることができませんでした。リモートサーバで実行するタスクのリストがあり、スクリプトを渡すことはOKです!ただし、要件に適合しません。<< heredocでSSHの中でSudoを実行する

私はリモートサーバーに接続するために私のサーバーから次のコマンドを実行しています。

ssh -t [email protected] << 'HERE' 
    sudo su - <diff_user> 
    do task as diff_user 
HERE 

ssh -tt [email protected] << 'HERE' 
    sudo su - <diff_user> 
    do task as diff_user 
    HERE 

最初のオプション(-t)を使用しても、私はまだsudoを実行できません。

sudoを:申し訳ありませんが、あなたは(-tt)上述の第2のオプションではsudo

を実行するための端末を持っている必要があります、私は、現在のサーバーセッション、総混乱に逆入力/出力を得るメートル。

私はリモートホストで実行するためにSSHにスクリプトとしてコンテンツを渡そうとしましたが、同様の結果が得られました。

コメントアウト以外の方法はありますか?/etcにある

デフォルトrequirettyは/ sudoersファイルはそれがある時はいつでも私は、RedHatのは、それが取り除か/将来のバージョンでコメントアウトすることが承認さを知って、私も上にしようとしていない

ファイル。私がステップを踏むと、100以上のVMで処理が完了します(さらに、VM上のファイルを編集して試してみる権限がありません)。したがって

Bug 1020147

、私の問題は、以前、同じまま。ここでは専門家から何らかのインプットを得ることができれば嬉しいです:)

追加情報:RedHat RHEL 6、2.6.32-573.3.1 を使用しています。私はリモートホストにアクセスしていますが、私のIDはdiff_userに切り替えるためのパスワードを必要としません。

答えて

0

このように質問すると、パスワードなしのパスワードはありません。sudo

stdinにスクリプトを置くと、リモートプロセス(sudo)と通信できません。

あなたは、むしろsshsuコマンドを使用する必要があります

ssh -t [email protected] "sudo su - <diff_user> -c do task as diff_user" 

をそれが動作しない場合があります。対話セッションは、expect(ここでは多くの質問があります)を使用して開始できます。

+0

ありがとう!応答Jakujeのために。私はリモートホスト上でかなりのタスクを実行する必要があり、すべてを1行で渡すことは最後のアイデアです。私はパスワードが少ないsudoを持っている、私は 'user'のパスワードを渡す必要がありますが、 'diff_user'にsudoするのではありません。 'user'としてサーバにいます。 'ssh -t user @ server" sudo su - <<ここでは「ここです。しかし、それはsshの違法使用のように思えます。ガイドをお願いしますか? – simer

0

Bros、自動化された方法で別のマシンに接続しようとしましたが、root/sudoにしかアクセスできないログをチェックしました。これはパスワード、サーバー、ユーザーなどをファイルに渡して行いました。安全でもなく、良い習慣でもありませんが、これは私の会社で行われる方法です、それについて文句を言ってはいけません。とにかく私は次のような問題を抱えていました:tcgetattr:デバイスの不適切なioctl、tty関連の問題私は覚えていません、sudo:申し訳ありませんが、sudoを実行するにはttyが必要です。私はこの3週間苦しんだ。最後に、奇妙なメッセージがなくても、サーバーから応答が返ってきます。私に役立つコードは次のとおりです。

#!/bin/bash 
function checkLog(){ 
FILE=$1 
readarray -t LINES < "$FILE" 
machine=${LINES[4]} 
user=${LINES[5]} 
password=${LINES[6]} 
fileName=${LINES[7]} 
numberOfLines=${LINES[8]} 

IFS='' read -r -d '' SSH_COMMAND <<EOT 
sudo -S <<< '$password' tail $fileName -n $numberOfLines 
EOT 

RESULTS=$(sshpass -p $password ssh -tt [email protected]$machine "${SSH_COMMAND}") 
echo "$RESULTS" 
} 

checkLog $1 
関連する問題