次のタスクを実行できるユーザーとしてリモートシステムにログインできますsudo su -
。 rootとしてログインできません。
リモートコンピュータで実行したいスクリプトをローカルに持っています。さらに、スクリプトは他のスクリプトを介してそこに送信されます。
私は何をすべきかわかりません。ここに多くの質問と回答を投稿しましたが、成功しませんでした。私が得た最も近いもの:
COMMAND_SSH="sudo -i <<\'EOF\'"`cat ./unifyServiceNode.sh`"\\nEOF\\n" ;;
...
while read HOST; do
echo -e "\n\n======== $USER_@$HOST <-- $COMMAND_SSH =================\n\n";
ssh -n -tt centos@$HOST "'$COMMAND_SSH'";
done < hosts.txt
最後に、次のような出力を得ました。
======== [email protected] <-- sudo -i <<\'EOF\'
##
## Creates a few links and scripts to unify the nodes maintainance.
##
BB="/bb"
NAME="bpds-api"
NAME2="bpds-"
mkdir -p $BB
ln -s /opt/$NAME/logs/*.log $BB/log
ln -s /opt/$NAME/conf/api/$NAME.yml $BB/conf.yml || ln -s /opt/$NAME/conf/api/$NAME2.yml $BB/conf.yml
echo "systemctl \${1:-restart} "${@:2}" $NAME" > $BB/Sys
echo "tail -\${1:-500f} $BB/log" > $BB/Tail
echo "nano $BB/conf.yml" > $BB/Conf
chmod a+x $BB/Sys $BB/Tail $BB/Conf
echo "export PATH=\$PATH:$BB" >> ~/.bashrc
EOF
=====================================
bash: sudo -i <<\EOF': command not found
bash: line 14: /bb/Sys: Permission denied
bash: line 15: /bb/Tail: Permission denied
bash: line 16: /bb/Conf: Permission denied
chmod: changing permissions of ‘/bb/Sys’: Operation not permitted
chmod: changing permissions of ‘/bb/Tail’: Operation not permitted
chmod: changing permissions of ‘/bb/Conf’: Operation not permitted
bash: -c: line 18: unexpected EOF while looking for matching `''
bash: -c: line 19: syntax error: unexpected end of file
Connection to somehost.com closed.
これは個々のコマンドを見るために「最も近い」ですが、最初の行がsudo
正しく<<EOF
エスケープされていないため、その下にはありません。
sudo
**overの下でランダムスクリプトをどのように実行する必要がありますかssh
? 」
答え1
投稿してからすぐ見つけました。
COMMAND_SSH="sudo -i <<'EOF'"`cat ./unifyServiceNode.sh``echo -e '\nEOF'` ;;
ssh -n -tt centos@$HOST "$COMMAND_SSH"; ## -n prevents reading the input. -tt forces TTY.
SSHコマンドの周りの追加sが'
問題のようです。またecho
。
しかし、これが幸運なハッキングなのか、それとも正しいアプローチなのかはわかりません。正直なところ、私はBashの引用符のレビューに完全に落ちた。 :)
答え2
現在のアプローチは非常に複雑で、使いにくいです。
これは次のように単純化できます。
ssh -i $AWS_KEY centos@$HOST sudo sh < ./unifyServiceNode.sh
答え3
実行する必要があるコマンドをスクリプトに入れ、それを使用してスクリプトをホストに転送してscp
実行しますssh
。
または、この文書を適切なシェルに提供してください。
ssh server sh <<'END_SCRIPT'
script code
goes here
END_SCRIPT
または、複数のホストをリモートで設定するには、Ansible または同様のシステムを使用します。
通常、コマンドを変数に入れたくありません。
答え4
プレーンテキストパスワードを保存したい場合(もちろん悪い考えです)、およびを組み合わせてsshpass -p "my_ssh_password"
ください。ssh << HEREDOC
echo "my_sudo_password" | sudo -S my_cmd
例:
sshpass -p "my_ssh_password" ssh my_user@my_ip << 'ENDSSH'
echo "my_sudo_password" | sudo -S my_sudo_command1
echo "my_sudo_password" | sudo -S my_sudo_command2
echo "my_sudo_password" | sudo -S my_sudo_script
ENDSSH