我正在编写一个脚本,其目的是连接到多个服务器并创建一个帐户。 “核心”是:
ssh user@ip
sudo su -
useradd -m -p 123 $1
if [ $? -eq 0 ]; then
echo "$1 successfully created on ip."
fi
chage -d 0 $1
chown -R $1 /home/$1
exit #exit root
exit #exit the server
我已经在服务器之间建立了私钥 - 公钥关系,以便能够在不提示输入密码的情况下执行ssh,但是,当我运行脚本时,它执行ssh但后来不执行下一个目标机器上的命令。相反,当手动退出目标服务器时,我看到这些命令在本地计算机上执行(或更好地说,试图执行)。
答案 0 :(得分:0)
它不会以这种方式工作。你应该这样做:
ssh user@ip 'yourcommands ; listed ; etc.'
或scp /your/scriptname user@ip:/tmp/
复制您要在服务器上执行的脚本,然后执行ssh user@ip 'sh /tmp/yourscriptname'
但是在启动sudo
时你正在启动另一个脚本。
现在你有(至少)两个选择:
ssh user@ip 'sudo -s -- "yourcommands ; listed ; etc."'
或将sudo
之后的部分复制到另一个脚本,然后:
ssh user@ip 'sudo -s -- "sh differentscript"'`
答案 1 :(得分:0)
因此,同时运行ssh
和sudo
命令
ssh user@ip bash -c "'
sudo su -
useradd -m -p 123 $1
if [ $? -eq 0 ]; then
echo "$1 successfully created on ip."
fi
chage -d 0 $1
chown -R $1 /home/$1
exit #exit root
exit #exit the server
'"
答案 2 :(得分:0)
如果您打算sudo
为什么不以root身份ssh:root@ip
?只是做:
ssh root@ip 'command1; command2; command3'
在您的情况下,如果您想确保它们都是成功的,以便继续:
ssh root@ip 'USER=someUser; useradd -m -p 123 $USER && chage -d 0 $USER && chown -R $USER /home/$USER'
修改强>
如果不执行root访问,则执行以下操作:
使用要在远程计算机上执行的命令创建脚本,例如script.sh
:
#!/bin/bash
USER=someUser
useradd -m -p 123 $USER && chage -d 0 $USER && chown -R $USER /home/$USER
将脚本复制到远程计算机:
scp script.sh user@ip:/destination/dir
远程调用它:
ssh user@ip 'sudo /destination/dir/script.sh'
EDIT2:
其他选项,无需创建任何文件:
ssh user@ip "sudo bash -c 'USER=someUser && useradd -m -p 123 $USER && chage -d 0 $USER && chown -R $USER /home/$USER'"