使用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命令直接登录
 
    
    
    
    