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"
本文来自博客园,作者:duchaoqun,转载请注明原文链接:https://www.cnblogs.com/duchaoqun/p/13025596.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?