怎么实现ssh 自动登录到远程linux服务器,并执行脚本的功能

1. 怎么实现ssh 自动登录到远程linux服务器,并执行脚本的功能

要实现ssh自动登录到远程Linux服务器并执行脚本的功能,可以使用以下步骤:

  1. 在本地生成SSH密钥

使用以下命令在本地生成SSH密钥对:

ssh-keygen -t rsa
  1. 将SSH公钥复制到远程服务器

使用以下命令将本地生成的SSH公钥复制到远程服务器上的authorized_keys文件中:

ssh-copy-id user@remote_server

其中,user为远程服务器上的用户名,remote_server为远程服务器的IP地址或主机名。

  1. 测试SSH登陆

使用以下命令测试SSH登录是否成功:

ssh user@remote_server

如果成功登录,说明SSH登录已经配置好了。

  1. 创建Shell脚本

在本地创建需要执行的Shell脚本,并将其上传到远程服务器上。

  1. 使用SSH远程执行脚本

使用以下命令在本地执行远程脚本:

ssh user@remote_server './remote_script.sh'

其中,user为远程服务器上的用户名,remote_server为远程服务器的IP地址或主机名,remote_script.sh为远程服务器上的脚本文件名。

2. 我希望可以自动输入用户名和密码,不需要用户手动输入

为了实现自动输入用户名和密码,可以使用SSH密钥登录。

以下是相应的步骤:

  1. 生成SSH密钥对

使用以下命令在本地生成SSH密钥对(如果已经生成过,则跳过此步骤):

ssh-keygen -t rsa
  1. 将SSH公钥复制到远程服务器

使用以下命令将本地生成的公钥复制到远程服务器上的authorized_keys文件中:

ssh-copy-id user@remote_server
  1. 创建一个包含SSH密码的文件

在本地创建一个包含SSH密码的文件,例如password.txt。注意,这个文件应该被保护,并只能由管理员访问。

echo 'your_ssh_password' > ~/.ssh/password.txt && chmod 600 ~/.ssh/password.txt
  1. 创建一个Shell脚本

在本地创建一个Shell脚本,例如ssh_auto_login.sh,并将以下代码复制进去:

#!/bin/bash

# 获取SSH密码
password="$(cat ~/.ssh/password.txt)"

# SSH自动登录
sshpass -p "${password}" ssh user@remote_server -o StrictHostKeyChecking=no

其中,user为远程服务器上的用户名,remote_server为远程服务器的IP地址或主机名。注意,-o StrictHostKeyChecking=no参数是为了避免第一次连接时询问是否信任远程主机的密钥。

  1. 将Shell脚本设置为可执行

将Shell脚本设置为可执行:

chmod +x ssh_auto_login.sh 

这样,当您运行ssh_auto_login.sh时,系统将自动将您连接到远程服务器上,而无需手动输入用户名或密码。

3. 换一个实现方案。这套方案不好。有没有什么软件之类的?

是的,有一个名为"expect"的软件可以实现自动化SSH登录。Expect是一种自动交互式程序的标准工具,在Linux系统中使用较为广泛,可以通过Expect脚本来自动执行与其他应用程序或Shell的交互操作,例如自动化SSH登录、FTP上传/下载等。

以下是使用Expect实现自动SSH登录的步骤:

  1. 安装Expect软件

在Linux系统上进行安装,可以使用以下命令:

sudo apt-get install expect
  1. 创建Expect脚本

在本地创建一个Expect脚本,例如ssh_login.exp,并将以下代码复制进去:

#!/usr/bin/expect -f

set timeout 30
set user [lindex $argv 0]
set password [lindex $argv 1]
set host [lindex $argv 2]
set script [lindex $argv 3]

spawn ssh ${user}@${host} -t ${script}

expect {
    "yes/no" { 
        send "yes\r"
        exp_continue 
    }
    "password:" { 
        send "${password}\r" 
    }
}

interact

其中,user为远程服务器上的用户名,password为SSH密码,host为远程服务器的IP地址或主机名,script为需要执行的脚本。

  1. 将Expect脚本设置为可执行

将Expect脚本设置为可执行:

chmod +x ssh_login.exp
  1. 执行Expect脚本

在本地运行以下命令执行Expect脚本:

./ssh_login.exp user password remote_server remote_script.sh

其中,user为远程服务器上的用户名,password为SSH密码,remote_server为远程服务器的IP地址或主机名,remote_script.sh为需要执行的脚本。

此时,Expect脚本将会自动化执行SSH登录和执行脚本,而无需手动输入用户名和密码。

4. 除了 expect 外,还有其他什么软件吗?以及怎么使用?

除了expect外,还有一些软件也可以实现自动SSH登录,例如sshpass。

以下是使用sshpass实现自动SSH登录的步骤:

  1. 安装sshpass软件

在Linux系统上进行安装,可以使用以下命令:

sudo apt-get install sshpass
  1. 创建Shell脚本

在本地创建一个Shell脚本,例如ssh_auto_login.sh,并将以下代码复制进去:

#!/bin/bash

# SSH自动登录
sshpass -p 'your_password' ssh -o StrictHostKeyChecking=no user@remote_server 'command'

# 替换自己的SSH密码,user为远程服务器上的用户名,remote_server为远程服务器的IP地址或主机名,command为需要执行的命令或脚本

其中,your_password为您的SSH密码,user为远程服务器上的用户名,remote_server为远程服务器的IP地址或主机名,command为需要执行的命令或脚本。注意,-o StrictHostKeyChecking=no 参数是为了避免第一次连接时询问是否信任远程主机的密钥。

  1. 将Shell脚本设置为可执行

将Shell脚本设置为可执行:

chmod +x ssh_auto_login.sh
  1. 执行Shell脚本

在本地运行以下命令执行Shell脚本:

./ssh_auto_login.sh

此时,SSH登录和执行命令或脚本将会自动化进行,而无需手动输入用户名和密码。

类似文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注