1. 怎么实现ssh 自动登录到远程linux服务器,并执行脚本的功能
要实现ssh自动登录到远程Linux服务器并执行脚本的功能,可以使用以下步骤:
- 在本地生成SSH密钥
使用以下命令在本地生成SSH密钥对:
ssh-keygen -t rsa
- 将SSH公钥复制到远程服务器
使用以下命令将本地生成的SSH公钥复制到远程服务器上的authorized_keys文件中:
ssh-copy-id user@remote_server
其中,user为远程服务器上的用户名,remote_server为远程服务器的IP地址或主机名。
- 测试SSH登陆
使用以下命令测试SSH登录是否成功:
ssh user@remote_server
如果成功登录,说明SSH登录已经配置好了。
- 创建Shell脚本
在本地创建需要执行的Shell脚本,并将其上传到远程服务器上。
- 使用SSH远程执行脚本
使用以下命令在本地执行远程脚本:
ssh user@remote_server './remote_script.sh'
其中,user为远程服务器上的用户名,remote_server为远程服务器的IP地址或主机名,remote_script.sh为远程服务器上的脚本文件名。
2. 我希望可以自动输入用户名和密码,不需要用户手动输入
为了实现自动输入用户名和密码,可以使用SSH密钥登录。
以下是相应的步骤:
- 生成SSH密钥对
使用以下命令在本地生成SSH密钥对(如果已经生成过,则跳过此步骤):
ssh-keygen -t rsa
- 将SSH公钥复制到远程服务器
使用以下命令将本地生成的公钥复制到远程服务器上的authorized_keys文件中:
ssh-copy-id user@remote_server
- 创建一个包含SSH密码的文件
在本地创建一个包含SSH密码的文件,例如password.txt。注意,这个文件应该被保护,并只能由管理员访问。
echo 'your_ssh_password' > ~/.ssh/password.txt && chmod 600 ~/.ssh/password.txt
- 创建一个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参数是为了避免第一次连接时询问是否信任远程主机的密钥。
- 将Shell脚本设置为可执行
将Shell脚本设置为可执行:
chmod +x ssh_auto_login.sh
这样,当您运行ssh_auto_login.sh时,系统将自动将您连接到远程服务器上,而无需手动输入用户名或密码。
3. 换一个实现方案。这套方案不好。有没有什么软件之类的?
是的,有一个名为"expect"的软件可以实现自动化SSH登录。Expect是一种自动交互式程序的标准工具,在Linux系统中使用较为广泛,可以通过Expect脚本来自动执行与其他应用程序或Shell的交互操作,例如自动化SSH登录、FTP上传/下载等。
以下是使用Expect实现自动SSH登录的步骤:
- 安装Expect软件
在Linux系统上进行安装,可以使用以下命令:
sudo apt-get install expect
- 创建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为需要执行的脚本。
- 将Expect脚本设置为可执行
将Expect脚本设置为可执行:
chmod +x ssh_login.exp
- 执行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登录的步骤:
- 安装sshpass软件
在Linux系统上进行安装,可以使用以下命令:
sudo apt-get install sshpass
- 创建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 参数是为了避免第一次连接时询问是否信任远程主机的密钥。
- 将Shell脚本设置为可执行
将Shell脚本设置为可执行:
chmod +x ssh_auto_login.sh
- 执行Shell脚本
在本地运行以下命令执行Shell脚本:
./ssh_auto_login.sh
此时,SSH登录和执行命令或脚本将会自动化进行,而无需手动输入用户名和密码。
赛文市场营销