ssh
参考
SSH 介绍
应用篇
SSH 常用命令
ssh -v <user>@<hostip>
- 打印运行情况和调试信息ssh -vv <user>@<hostip>
- 打印更详细的运行情况和调试信息ssh -vvv <user>@<hostip>
- 打印最详细的运行情况和调试信息
identity file type .../.ssh/id_* type <number>
中的数字只是 sshkey_types 枚举 的整数值(基于零),-1表示错误
KEY_RSA, // id_rsa has type 0
KEY_DSA, // id_dsa has type 1, but as you have no id_dsa key file, -1 is used
KEY_ECDSA, // id_ecdsa has type 2
debug [123]
: 行前缀中的数字表示其后面的消息的调试级别。它对应于您在命令行上给出的-v
的数量(3 是最大值)。即如果设置-v
,将打印 debug1 消息,使用-vv
,您将获得 debug1 和 debug2,最多是三级,即-vvv
ssh -T git@xxx.com
- 测试 ssh 密钥连接是否成功ssh <user>@<hostip>
- 登录 hostssh <user>@<hostip> "[command]"
- 登录 host 并执行命令ssh -J <跳板机登录用户>@<ip>:<port> <目标机登录用户>@<ip> -p <port>
- 通过跳板机登录目标机
ssh 命令登录失败后,重试时总是卡住,一般在重试前先重启 sshd 服务就可以解决
ssh <user>@<hostip> <command>
- 登录 host 直接执行命令
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <user>@<hostip>
- 不验证 host key 登录ssh -L <port_a>:<remote host>:<port_b> user_b@ip_b
- 本地端口转发
ssh -R <port_a>:<remote host>:<port_a> user_a@ip_a
- 远程端口转发
ssh -g -L <port_a>:<remote host>:<port_b> user_b@ip_b
- 路由转发
ssh -D <port> user@remote_ip
- 动态端口转发
ssh-keygen 常用命令
ssh-keygen
- 默认在~/.ssh/
下生成 RSA 公私密钥对ssh-keygen -t dsa
- 在~/.ssh/
下生成 dsa 公私密钥对ssh-keygen -t rsa -C '电子邮箱'
ssh-keygen -y -f [私钥路径] > [公钥路径]
- 私钥生成公钥
ssh-keygen -f "/home/xcq/.ssh/known_hosts" -R "192.168.7.47"
- 删除指定 known_hosts 文件中的主机公钥ssh-keyscan
ssh-keysign
ssh-add
ssh-copy-id 常用命令
ssh-copy-id <user>@<hostip>
- 默认将本地主机公钥~/.ssh/id_rsa.pub
添加到远程服务器<user>/.ssh/authorized_keys
文件中,实现无密码登录ssh-copy-id -i <公钥路径>/id_rsa.pub <user>@<hostip>
- 将本地主机公钥公钥路径
中的id_rsa.pub
添加到远程服务器<user>/.ssh/authorized_keys
文件中,实现无密码登录
SCP 常用命令
scp <local_file_path> <user>@<hostip>:<remote_folder_path>
- 上传本地文件到远程scp -r <local_file_path> <user>@<hostip>:<remote_folder_path>
- 上传本地文件夹到远程scp <user>@<hostip>:<remote_folder_path> <local_file_path>
- 下载远程文件到本地scp -r <user>@<hostip>:<remote_folder_path> <local_file_path>
- 下载远程文件夹到本地Linux 和 Windows 实现 scp 互传文件
因为 Windows 系统本身不支持 ssh 协议,所以要想实现两者 scp 互传文件,必须在 Windows 客户端安装
ssh for windows
的客户端软件,比如 winsshd,使 Windows 系统支持 ssh 协议
scp /root/README.md administrator@<winIP>:/d:/test/
- 通过 scp 命令上传本地 (Linux) 文件到远程 (Windows) 上scp administrator@<winIP>:/d:/test/README.md /root/
- 通过 scp 命令下载远程 (Windows) 文件到本地 (Linux)
无密码公钥登陆
Linux
Windows
Windows 下的 openssh 没有 ssh-copy-id 命令。故手动将本地公钥添加至远程服务器的 ~/.ssh/authorized_keys 文件中即可。
ssh 常用配置
常用配置文件
/etc/ssh/ssh.config
- 客户端配置文件/etc/ssh/sshd.config
- 服务的配置文件~/.ssh/known_hosts
- 查看已知主机的公钥~/.ssh/authorized_keys
- 存放需要密钥登录本机的 host 公钥
一、配置密钥登录
1、生成本地 RSA 或 DSA 密钥对
2、将本地公钥内容追加到远程服务器的/root/.ssh/authorized_keys
或 用户目录下的.ssh/authorized_keys
3、重启 ssh,退出再次登陆即可实现无密码登录
二、开启密钥认证登录
三、开启密码登录
四、开启 root 登录
五、关闭 hostkeychecking,初次登录时不用输入 yes
原理篇
密码学加密算法
加密方法可以分为两大类,一类是单钥加密( private key cryptography ),还有一类叫做双钥加密( public key cryptography )。前者的加密和解密过程都用同一套密码,后者的加密和解密过程用的是两套密码
【mì yuè】读音下的“密钥”的意思:紧密的锁闭。这里的用法用了“密钥”的动词性质。
【 mì yào】读音下的“密钥”的意思:密码学中的专有名词,指解密所需要的特殊代码。这里用了“密钥”的名词性
对称密钥加密 - Symmetric-key algorithm
又称为对称加密、私钥加密、共享密钥加密、单钥加密
这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥,所以这被称为 "对称加密算法"
1976 年以前,所有的加密算法都使用 "对称加密算法",通用的单钥加密算法为 DES( Data Encryption Standard )
在对称密钥加密的情况下,密钥只有一把,所以密钥的保存变得很重要。一旦密钥泄漏,密码也就被破解
公开密钥加密 - Public-key cryptography
又称为非对称加密 - asymmetric cryptography
公开密钥加密需要两个密钥,一个是公开密钥( 加密使用 ),另一个是私有密钥( 解密使用 )
SSH 原理简述
用户使用
ssh user@host
命令对远程主机发起登陆远程主机将自己的公钥返回给请求主机
请求主机使用公钥对用户输入的密码进行加密
请求主机将加密后的密码发送给远程主机
远程主机使用私钥对密码进行解密
最后,远程主机判断解密后的密码是否与用户密码一致,一致就同意登陆,否则反之
用户使用
ssh user@host
命令对远程主机发起登陆远程主机对用户返回一个随机串
用户所在主机使用私钥对这个随机串进行加密,并将加密的随机串返回至远程主机
远程主机使用分发过来的公钥对加密随机串进行解密
如果解密成功,就证明用户的登陆信息是正确的,则允许登陆;否则反之
SSH 中间人攻击
由于 SSH 不像 https 协议那样,SSH 协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。这就导致如果有人截获了登陆请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪,用户再通过伪造的公钥加密密码,再发送给冒充主机,此时冒充的主机就可以获取用户的登陆密码了,那么 SSH 的安全机制就荡然无存了,这也就是我们常说的中间人攻击
代理
最后更新于