已复制
全屏展示
复制代码

SSH自动登录方法总结


· 3 min read

一. 生成私钥公钥方式登录

生成私钥公钥对

  • 在命令行输入ssh-keygen。首先在本生机器成私钥公钥对,生成过程中一路回车使用默认值。完成后会在家目录~/.ssh/下生成两个文件: id_rsaid_rsa.pubid_rsa是私钥,id_rsa.pub是公钥。
# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:rwzs4iF/opTOijmoYMabsVNkYEOHmMk3X9UOkz/TwK0 root@ycs.com
The key's randomart image is:
+---[RSA 2048]----+
|++..    ..+ .    |
|+*.o   . + + .   |
|. + o .   = +    |
|   o .     E .   |
|  o     S   o    |
|.  o .   .       |
|o== . o   .      |
|B*=ooo.o .       |
|**=oo+. o        |
+----[SHA256]-----+

上传私钥公钥对

id_rsa.pub上传到要登录的服务器上。

  • 方法1:可以直接将id_rsa.pub 的内容直接复制粘贴到远程的 ~/.ssh/authorized_keys 文件亦可,一行表示一个用户的公钥,注意 authorized_keys 文件的权限必须是 600。
  • 方法2:使用ssh-copy-id 命令上传,需要输入远程服务器用户的密码。
ssh-copy-id username@1.1.1.1

二. 使用 sshpass 自动登录

sshpass 可以自动输入密码

# centos安装
sudo yum install -y sshpass

# ubuntu安装
sudo apt install sshpass

# 使用 sshpass -p password
# -o StrictHostKeyChecking=no 表示首次登录时避免提示信息
sshpass -p mypassword ssh -p 22 -o StrictHostKeyChecking=no username@1.1.1.1

三. 使用  expect  自动登录

3.1 自动登录后不退出

  • 有些系统没有安装此命令
# ubuntu 安装
sudo apt install expect

# centos 安装
sudo yum install expect
  • expect_auto_ssh.expect    注意是 expect 脚本,不是 shell 脚本。
#!/usr/bin/expect 

set timeout 30
set host [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set pswd [lindex $argv 3]

# spawn 是 expect 环境的内部命令。
# 主要的功能是管理 ssh 运行的进程,用来传递交互指令。
spawn ssh -p $port $user@$host


# 进入交互式
# 遇到yes/no输入yes回车, 继续
# 出现密码提示,发送密码
expect {
    "*yes/no" { send "yes\r"; exp_continue }
    "*password:" { send "$pswd\r" }
}

# 交互模式,用户会停留在远程服务器上面
interact
  • 使用此脚本
# 执行权限
chmod +x ./expect_auto_ssh.expect

# 有执行权限运行
./expect_auto_ssh.expect host port user pswd

# 或者指定 expect 命令运行
expect ./expect_auto_ssh.expect host port user pswd

3.2 登录执行命令后退出

  • 下面的示例展示了登录远程会话,然后执行命令后退出会话。
#!/usr/bin/expect 

set timeout 30
set host [lindex $argv 0]
set port [lindex $argv 1]
set user [lindex $argv 2]
set pswd [lindex $argv 3]

# spawn 是 expect 环境的内部命令。
# 主要的功能是管理 ssh 运行的进程,用来传递交互指令。
spawn ssh -p $port $user@$host 


# 进入交互式
# 遇到yes/no输入yes回车, 继续
# 出现密码提示,发送密码
expect {
    "*yes/no" { send "yes\r"; exp_continue }
    "*password:" { send "$pswd\r" }
}

# 登录后执行命令退出: 注意特殊字符的转义
expect "*$ "
send "pwd\r"
send "echo \"now is \$(date). \" >/tmp/expect_test \r"
send  "exit\r"
expect eof

文章推荐