Bash脚本失败

时间:2014-02-14 11:11:58

标签: bash ssh

我正在编写一个脚本,其目的是连接到多个服务器并创建一个帐户。 “核心”是:

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但后来不执行下一个目标机器上的命令。相反,当手动退出目标服务器时,我看到这些命令在本地计算机上执行(或更好地说,试图执行)。

3 个答案:

答案 0 :(得分:0)

它不会以这种方式工作。你应该这样做:

  1. ssh user@ip 'yourcommands ; listed ; etc.'
  2. 通过scp /your/scriptname user@ip:/tmp/复制您要在服务器上执行的脚本,然后执行ssh user@ip 'sh /tmp/yourscriptname'
  3. 但是在启动sudo时你正在启动另一个脚本。

    现在你有(至少)两个选择:

    1. ssh user@ip 'sudo -s -- "yourcommands ; listed ; etc."'
    2. sudo之后的部分复制到另一个脚本,然后:

      ssh user@ip 'sudo -s -- "sh differentscript"'`
      

答案 1 :(得分:0)

因此,同时运行sshsudo命令

时,不应要求密码
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访问,则执行以下操作:

  1. 使用要在远程计算机上执行的命令创建脚本,例如script.sh

    #!/bin/bash
    USER=someUser 
    useradd -m -p 123 $USER && chage -d 0 $USER && chown -R $USER /home/$USER
    
  2. 将脚本复制到远程计算机:

    scp script.sh user@ip:/destination/dir
    
  3. 远程调用它:

    ssh user@ip 'sudo /destination/dir/script.sh'
    
  4. EDIT2:

    其他选项,无需创建任何文件:

    ssh user@ip "sudo bash -c 'USER=someUser && useradd -m -p 123 $USER && chage -d 0 $USER && chown -R $USER /home/$USER'"