ssh

ssh

基本用法

# 使用用户名登录远程主机
ssh user@host

# 如果本地用户名和远程用户名一致,可以不输入用户名
ssh host

# 指定远程服务器ssh服务的开放端口
ssh -p 8765 user@host

基础知识

如果你第一次登录,会提示你存储公钥指纹信息,意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。
例如是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
然后,会要求输入密码。如果密码正确,就可以登录了。
当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

公钥登录

参考文档:Linux SSH 使用密钥登陆

远程操作

# 将本地公钥追加到远程服务器的认证密钥列表中
ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

# 将$HOME/src/目录下面的所有文件,复制到远程主机的$HOME/src/目录
cd && tar czv src | ssh user@host 'tar xz'

# 将远程主机$HOME/src/目录下面的所有文件,复制到用户的当前目录。
ssh user@host 'tar cz src' | tar xzv

# 查看远程主机是否运行进程httpd。
ssh user@host 'ps ax | grep [h]ttpd'

动态端口转发(Dynamic port forwarding(SOCKS proxy))

ssh -D 8484 -p 28546 root@67.230.188.134
本地代理开启socks代理端口,链接远程主机,然后转发本地的请求。
Then configure the browser provxy.

本地端口转发(Local port forwarding)

# 172.26.114.90 机器是内网的数据库,外部不能直接访问。
# 172.26.114.88(39.98.227.168)是接口机,有两个网卡,一个是外网网卡,内网网卡可以访问到内网数据库。
# 在我们本机执行如下命令,含义是在本机打开8888端口,通过39.98.227.168连接到内网172.26.114.90的5432端口。
ssh -L 8888:172.26.114.90:5432 -p 22 root@39.98.227.168

远程端口转发(Remote port forwarding)

# 修改公网(内网地址:172.26.114.88,公网地址:39.98.227.168)服务配置,开启"网关端口"功能,如果不开启转过去的是127.0.0.1 而不是0.0.0.0
vim /etc/ssh/sshd_config
GatewayPorts yes

# 配置客户端超时中断配置:避免部分应用的连接不会自动断开,占用连接数资源。
ClientAliveInterval 30
ClientAliveCountMax 2

# 本机172.26.114.87(局域网内其他地址),将本机5432端口,转发到172.26.114.88的5432端口上。
ssh -fNR 5432:172.26.114.87:5432 172.26.114.88

# 在172.26.114.88查看端口开放信息(如果不开启这台机器的GatewayPorts配置,下面就会显示127.0.0.1:5432)
netstat -tunlp -tunlp|grep 5432
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 30257/sshd: root

其他

参数解释
N参数,表示只连接远程主机,不打开远程shell;T参数,表示不为这个连接分配TTY。这个两个参数可以放在一起用,代表这个SSH连接只用来传数据,不执行远程操作。
ssh -NT -D 8080 host
f参数,表示SSH连接成功后,转入后台运行
ssh -f -D 8080 host

执行远程主机上的命令:
ssh -l root 192.168.110.34 "cat /proc/cpuinfo"

执行远程主机上的shell:
ssh -l root node1 "/tmp/a.sh"

posted @ 2020-06-01 15:46  duchaoqun  阅读(188)  评论(0编辑  收藏  举报