Open SSH
Openssh
首先安装Openssh
用户名密码方式连接
默认配置文件的路径为
/etc/ssh/sshd_config
,可更改是否禁用以密码方式登录、是否显示欢迎信息等…
1 | # ssh -p 端口号 用户名@主机名或者IP |
设置新密码
1 | passwd #此方式与更改linux当前登录用户密码是一样的,由于ssh连接主机一般使用主机用户名&密码 |
通过公私钥方式连接
腾讯云需要额外特殊配置
阿里云正常配置
技巧:拿私钥的一般是连接方,拿公钥的一般是被连接方
参考:
phoenixnap:How to Fix SSH Failed Permission Denied (publickey,gssapi-keyex,gssapi-with-mic)
配置/etc/ssh/sshd_config
(非root 命令前加sudo)
1 | PermitRootLogin yes #开启密钥验证 |
配置完成执行
1 | sudo systemctl restart sshd |
用户端/服务器端生成密钥对
1 | ssh-keygen #生成后连接时的默认密钥对 |
复制公钥到服务器
由于复制的公钥,只能决定被连接方,黑客截取到公钥也没什么用,除非他喜欢定义自己的服务器为被连接方给你玩。
复制公钥到服务器的authorized_keys文件/删除某个客户端的公钥都是立即生效的。
1 | # 一定先要在客户端生成id_rsa.pub,再将其拷贝到被连接方 |
指定私钥连接
1 |
|
默认私钥连接
1 | ~/ ~/ ssh root@fuding.qicp.vip -p 22 #回车即可连接成功(默认会选择id_rsa) |
ssh-agent
SSH代理是一个用于管理SSH密钥的程序。它可以在用户登录时启动,并在用户会话期间持续运行。当用户需要使用SSH密钥进行身份验证时,代理会提供密钥,免去了每次都需要输入密码的麻烦。
设置环境变量
执行以下命令可输出
1 | ssh-agent -s |
执行以下命令后,相关的环境变量(如SSH_AUTH_SOCK
和SSH_AGENT_PID
)将被设置到当前shell会话中
1 | eval $(ssh-agent -s) |
生成ssh密钥对
可以使用ssh-keygen
命令生成SSH密钥对,该命令将生成一个公钥文件(通常是id_rsa.pub
)和一个私钥文件(通常是id_rsa
)。公钥文件是你需要将其添加到目标服务器上的文件。
添加公钥后的主机为目标主机(服务端),生成密钥对机器是客户端。
添加私钥到SSH代理
可以添加多个私钥绑定同一个环境变量中,当连接某个目标主机时,ssh-agent会使用递归的方式加载私钥尝试连接目标主机,直到连接成功。
1 | 使用`ssh-add`命令时,它会尝试加载默认的私钥文件`~/.ssh/id_rsa`到ssh-agent |
以下是ssh-add
命令的一些常用用法:
加载默认私钥文件:
1
2
3执行示例
ssh-add
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)加载指定路径的私钥文件:
1
ssh-add /path/to/private_key
列出当前已加载到SSH代理的私钥:
1
2
3执行示例
ssh-add -l
2048 SHA256:GmzywdSI/RZA5lqnrdtuqFlkZF02sYwOyuyNiAegHaA /root/.ssh/id_rsa (RSA)从SSH代理中删除指定私钥:
1
ssh-add -d /path/to/private_key
从SSH代理中删除所有私钥:
1
ssh-add -D
SSH安全协议传输文件
SSH 不仅仅可以远程连接服务器,同样也可以使用SSH自带的scp命令进行文件上传(本地文件/文件夹)
参考:
scp文件/目录上传操作
上传文件:
1 | # scp 本地文件路径 远程主机用户名@远程主机名或IP:远程文件保存的位置路径 |
- 加上 -i 可以指定秘钥文件进行上传
上传目录:
1 | # scp -r 本地文件夹路径 远程主机用户名@远程主机名或IP:远程文件夹保存的位置路径 |
例:
1 | # 必须加-r才能复制目录里的所有文件及目录 |
SFTP服务器
文件下载推荐访问OpenSSH自带的sftp服务器(一般情况服务器22端口开启默认就可以使用客户端命令进行连接)
ssh 连接通常是这样:
1 | #用户名@主机名或IP |
sftp 用法也一样:
1 | #大写p指定端口号且不能写在主机之后 |
通过配置本地私钥进行连接配置远程公钥的服务器:
1 | sftp -i .ssh/id_rsa_centos -P 222 root@fuding.qicp.vip #此处的用户名和主机一定要放到最后,不然会报错 |
疑难
ssh易断开问题解决
一个互联网上的机器连接服务器非常容易断开,于是有以下两种方式来解决这个问题,当然也可以两个方式都用上。
- 在Linux客户端上修改文件
/etc/ssh/ssh_config
,添加如下内容:
1 | # 添加 |
- 在Linux服务器上修改文件
/etc/ssh/sshd_config
1 | # 添加 |
最后一定要重启配置过的机器的sshd
1 | systemctl restart sshd |
Too many authentication failures
如果你确定不是因为你输入了太多次错误密码,那么产生这个问题的一个可能原因是:
在发起连接的机器(记为A)的 ~/.ssh 目录下放了太多密钥文件,当你连接一台新的服务器并且没有在 ~/.ssh/config 文件中做过特殊的配置时,默认会挨个尝试所有密钥文件,而这些密钥文件,都不是适配那台新服务器的,所以会连接失败。参考:编码无悔:ssh连接Linux服务器时提示”Too many authentication failures”的解决办法
仍然要使用 用户名+密码 的方式登录目标服务器,加“PubkeyAuthentication=no”参数来指定不使用密钥文件
1
ssh -o PubkeyAuthentication=no root@192.168.15.16
禁止密码登陆,使用密钥对