ssh使用

 

SSH 穿越多个跳板机连接方法

win10 ssh 上传密钥过程, 出现 无法将”ssh-copy-id”项识别

配置

安装

# apt
sudo apt install openssh-server

# apk
sudo apk add openssh

命令

开启服务

sudo service ssh start

# 开机自启
sudo service ssh enable

停止服务

sudo service ssh stop

重启服务

sudo service ssh restart

# 或者
sudo systemctl restart sshd

生成密钥

ssh-keygen -t rsa -b 4096 -C "邮箱"

提示输入文件保存位置(默认是~/.ssh/id_rsa)和密钥密码(可选)

生成密钥后在根目录(/root/或/home/用户名)下生成.ssh目录

graph LR;
    S(.ssh目录)
    S-->A(authorized_keys)-->A1(存储其他主机公钥)
    S-->B(id_rsa)-->B1(本机私钥)
    S-->C(id_rsa.pub)-->C1(本机公钥)
    S-->D(know_hosts)-->D1(存储已认证主机host key)
清除密钥
ssh-keygen -R 远程主机IP

配置文件

/etc/ssh/sshd_config

禁用密码登陆(可选)

禁用密码后只能通过密钥进行SSH连接, 可避免密码被破译风险

修改配置项如下

# 禁用密码认证
PasswordAuthentication no

# 启用公钥认证(通常是默认启用)
PubkeyAuthentication yes

# 允许挑战响应认证(如果不需要也可以禁用)
ChallengeResponseAuthentication no

# 还可考虑禁用GSSAPI认证(如果不需要)
GSSAPIAuthentication no

操作

连接

密码连接

默认20端口
ssh 用户名@远程主机IP
  • 示例, 连接192.168.1.128 dmjcb用户, 默认20端口号

指定端口
ssh 用户名@远程主机IP -p 端口

密钥连接

手动复制

手动将本地id_rsa.pub 复制到远程主机.ssh/authorized_keys

命令行上传

若是windows系统, 需powershell中额外执行,

function ssh-copy-id([string]$userAtMachine, $args){
    $publicKey = "$ENV:USERPROFILE" + "/.ssh/id_rsa.pub"
    if (!(Test-Path "$publicKey")){
        Write-Error "ERROR: failed to open ID file '$publicKey': No such file"
    } else {
        & cat "$publicKey" | ssh $args $userAtMachine "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"
    }
}

之后windows或linux终端执行

ssh-copy-id -i 公钥路径(一般是.ssh/id_rsa.pub) 用户名@远程主机IP
  • 示例, 设置密钥连接192.168.1.128

长连接

保持SSH长期连接, 有两种方法

服务器修改
sudo nano /etc/ssh/sshd_config
# server每隔60秒发送一次请求给client, 然后client响应, 从而保持连接
ClientAliveInterval 60 

# server发出请求后, 客户端没有响应得次数达到3, 就自动断开连接, 正常情况下, client不会不响应
ClientAliveCountMax 3 

重启服务

sudo service ssh restart
添加参数

client端连接时添加ServerAliveInterval

ssh -o ServerAliveInterval=60 用户名@远程主机IP

远程操作

远程执行指令

ssh 用户名@远程主机IP '命令'
  • 示例, 远程执行ls -l

文件传输

SCP(Secure Copy)是SSH一个内置命令, 用于本地和远程机器之间传输文件

上传
scp 本地路径 (-r, 表示目录) 用户名@远程主机IP:远程路径
  • 示例, 上传本地self_assets目录到远程

下载
scp 用户名@远程主机IP:远程路径 本地路径
  • 示例, 下载远程文件

转发

端口转发

通过SSH可以进行端口转发, 将本地机器上端口映射到远程机器上, 或者将远程机器上端口映射到本地机器上

本地端口转发
ssh -L本地端口:目标地址:目标端口 用户名@远程主机IP
远程端口转发
ssh -R远程端口:目标地址:目标端口 用户名@远程主机IP
动态端口转发
ssh -D本地端口 用户名@远程主机IP

X11转发

SSH支持X11转发, 可在远程机器上运行图形化程序, 并在本地机器上显示

ssh -X 用户名@远程主机IP