一、免密码登录ssh
1、生成钥匙对
# 生成key,但首先你得安装ssh
ssh-keygen -t rsa -b 2048
# 一路按回车换行,终端输出大概是这样
# Generating public/private rsa key pair.
# Enter file in which to save the key (/home/username/.ssh/id_rsa):
# Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
# Your identification has been saved in /home/username/.ssh/id_rsa.
# Your public key has been saved in /home/username/.ssh/id_rsa.pub.2、将共钥传输给远端主机
# id@server 是你的用户名和远端主机地址喔
ssh-copy-id id@server
# 按规定输入远端主机密码后,成功的话能看到终端输出
# Number of key(s) added: 1
PS:公钥储存在远端主机这个文件里:.ssh/authorized_keys,现在当你重新再通过SSH连接到远端主机时,已经不再需要密码啦!
二、使用跳板连接到目标机器(ProxyJump)
本节内容参考自:SSH 通过跳板机直接访问内网机器、SSH使用技巧-免密码/自动代理
PS:需要 OpenSSH 7.3 以上版本才可以使用 ProxyJump, 使用下列命令查看OpenSSH 版本:
1、直接命令
临时使用:ssh -J [email protected]:port1,[email protected]:port2
# 可以直接使用上述命令通过跳板机直接登录内网机器,比如:
# ssh username@目标机器IP -p 22 -J username@跳板机IP:22
# 如果需要通过多个跳板机则以 , 分割:
# ssh username@目标机器IP -p 22 -J username1@跳板机IP1:22,username2@跳板机IP2:222、长期使用
配置文件||~\.ssh\config:Host tiaoban1 # 代表跳板机 1
HostName 跳板机 1 的 IP
Port 22 # ssh 连接端口
User username1 # 跳板机 1 的用户名
Host tiaoban2 # 代表跳板机 2
HostName 跳板机 2 的 IP
Port 22 # ssh 连接端口
User username2 # 跳板机 2 的用户名
Host target # 代表目标机器的名字
HostName 目标机器 IP # 这个是目标机器的 IP
Port 22 # 目标机器 ssh 的端口
User username_target # 目标机器的用户名
ProxyJump tiaoban1,tiaoban2
Host 10.10.0.* # 使用通配符 * 代表 10.10.0.1 - 10.10.0.255
Port 22 # 服务器端口
User username # 服务器用户名
ProxyJump tiaoban1,tiaoban23、使用方法:
ssh tiaoban1 # 连接到跳板机 1
ssh target # 连接到目标机器
三、安装expect交互
本节内容参考自:Shell脚本交互之:自动输入密码
PS:用于与控制台交互,如果上面的内容无法 免密登录服务器,可以用这种方法
1、安装
expect:ubuntu or debian
sudo apt-get install expect
centos7
yum install expect
mac os // 没有brew 去搜一下,怎么安装 brew
brew install expect2、语法:
# #!/bin/expect //原文此处是错误,导致 no such file or directory 正确的写法是 #!/usr/bin/expect -f
set timeout 30
spawn ssh -l jikuan.zjk 10.125.25.189
expect "password:"
send "zjk123\r"
interact3、说明:
在运行脚本时候要expect file,不能sh file了
上面语句第一句是设定超时时间为30s,spawn是expect的语句,执行命令前都要加这句
expect "password:"这句意思是交互获取是否返回password:关键字,因为在执行ssh时会返回输入password的提示:jikuan.zjk@10.125.25.189's password:
send就是将密码zjk123发送过去
interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台