使用shell脚本实现自动登陆服务器
前言
采用termux连接服务器时,总是需要ssh -p 22 root@XXXX
并且输入密码,于是编写一个登陆脚本,实现自动登陆。
实现
首先安装expect工具实现与终端的交互:
1
apt install expect
编写脚本:
vim login.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29!/usr/bin/expect
set timeout 20
获取命令行参数
if {$argc != 1} {
puts "Usage: $argv0 host_number"
exit 1
}
set host_number [lindex $argv 0]
根据命令行参数选择要登录的服务器
if {$host_number == 1} {
set username root
set password ***
set host ****
} elseif {$host_number == 2} {
set username root
set password ****
set host ****
} elseif {$hose_number == 3} {
set username root
set password ***
set host ****
} else {
puts "Invalid host number: $host_number"
exit 1
}
spawn ssh $username@$host
expect "password:"
send "$password\r"
interact赋予权限:
1
chmod +x login.sh
取别名
1
alias lg='path/to/login.sh' >> .zshrc
执行
通过lg 1
便可以登陆服务器一了,不需要自己输入密码,不过这种将密码以明文存储还是不太安全。
安全登录
使用SSH密钥对登录可以提高登录的安全性,以下是实现步骤。
1. 生成 SSH 密钥对
首先,在本地终端上(如CMD
,shell
,termux
)生成 SSH 密钥对:
1 | ssh-keygen -t rsa -b 4096 -C "your_email@example.com" |
2. 添加公钥到远程服务器
将生成的公钥(LINUX
环境默认是 ~/.ssh/id_rsa.pub
)复制到需要通过密钥登录的远程服务器:
1 | ssh-copy-id username@remote_host |
此命令会将公钥添加到远程服务器的 ~/.ssh/authorized_keys
文件中。如果没有 ssh-copy-id
命令,可以手动复制:
1 | cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" |
3. 确保正确的权限
确保远程服务器上的 .ssh
目录和 authorized_keys
文件具有正确的权限:
1 | ssh username@remote_host |
4. 连接到远程服务器
现在就可以使用 SSH 密钥对连接到远程服务器:
1 | ssh username@remote_host |
5. 简化登录操作
使用alias对登录操作取别名:
1 | #zsh终端 |
通过lg
命令直接登录