将shell脚本写入ssh到远程机器并执行命令

Bal*_*ash 87 linux ssh shell

我有两个问题:

  1. 有多个远程linux机器,我需要编写一个shell脚本,它将在每台机器上执行相同的命令集.(包括一些sudo操作).如何使用shell脚本完成此操作?
  2. 当ssh到远程机器时,如何在提示进行RSA指纹认证时进行处理.

远程计算机是在运行中创建的VM,我只有他们的IP.所以,我不能事先在这些机器上放置一个脚本文件,并从我的机器上执行它们.

And*_*ter 128

有多个远程linux机器,我需要编写一个shell脚本,它将在每台机器上执行相同的命令集.(包括一些sudo操作).如何使用shell脚本完成此操作?

您可以使用ssh执行此操作,例如:

#!/bin/bash
USERNAME=someUser
HOSTS="host1 host2 host3"
SCRIPT="pwd; ls"
for HOSTNAME in ${HOSTS} ; do
    ssh -l ${USERNAME} ${HOSTNAME} "${SCRIPT}"
done
Run Code Online (Sandbox Code Playgroud)

当ssh到远程机器时,如何在提示进行RSA指纹认证时进行处理.

您可以将StrictHostKeyChecking=no选项添加到ssh:

ssh -o StrictHostKeyChecking=no -l username hostname "pwd; ls"
Run Code Online (Sandbox Code Playgroud)

这将禁用主机密钥检查并自动将主机密钥添加到已知主机列表中.如果您不希望将主机添加到已知主机文件,请添加该选项-o UserKnownHostsFile=/dev/null.

请注意,这会禁用某些安全检查,例如防止中间人攻击.因此,它不应该应用于安全敏感的环境中.

  • 密码在哪里? (2认同)

Vir*_*oop 8

这对我有用。

语法: ssh -i pemfile.pem user_name@ip_address 'command_1 ; 命令2;命令3'

#! /bin/bash

echo "########### connecting to server and run commands in sequence ###########"
ssh -i ~/.ssh/ec2_instance.pem ubuntu@ip_address 'touch a.txt; touch b.txt; sudo systemctl status tomcat.service'
Run Code Online (Sandbox Code Playgroud)


Arj*_*bra 6

使用 sshpass 安装, apt-get install sshpass然后编辑脚本并按各自的顺序放置您的 linux 机器 IP、用户名和密码。之后运行该脚本。就是这样 !此脚本将在所有系统中安装 VLC。

#!/bin/bash
SCRIPT="cd Desktop; pwd;  echo -e 'PASSWORD' | sudo -S apt-get install vlc"
HOSTS=("192.168.1.121" "192.168.1.122" "192.168.1.123")
USERNAMES=("username1" "username2" "username3")
PASSWORDS=("password1" "password2" "password3")
for i in ${!HOSTS[*]} ; do
     echo ${HOSTS[i]}
     SCR=${SCRIPT/PASSWORD/${PASSWORDS[i]}}
     sshpass -p ${PASSWORDS[i]} ssh -l ${USERNAMES[i]} ${HOSTS[i]} "${SCR}"
done
Run Code Online (Sandbox Code Playgroud)

  • 使用 $SSHPASS 导出密码以避免在脚本中显示。参考:https://www.tecmint.com/sshpass-non-interactive-ssh-login-shell-script-ssh-password/ (2认同)

Dig*_*oss 5

有很多方法可以处理这个问题。

我最喜欢的方法是在远程系统上安装http://pamsshagentauth.sourceforge.net/以及您自己的公钥。(想办法在虚拟机上安装这些文件,不知何故你安装了整个 Unix 系统,还有几个文件?)

转发您的 ssh 代理后,您现在无需密码即可登录到每个系统。

更好的是,该 pam 模块将使用您的 ssh 密钥对对 sudo 进行身份验证,因此您可以根据需要以 root(或任何其他用户的)权限运行。

您无需担心主机密钥交互。如果输入不是终端,那么 ssh 只会限制您转发代理和使用密码进行身份验证的能力。

您还应该查看像 Capistrano 这样的软件包一定要环顾那个网站;它介绍了远程脚本。

单个脚本行可能如下所示:

ssh remote-system-name command arguments ... # so, for exmaple,
ssh target.mycorp.net sudo puppet apply
Run Code Online (Sandbox Code Playgroud)