配置文件~/.ssh/config和/etc/ssh/ssh_config

本文介绍了OpenSSH客户端配置文件的使用方法及关键配置项的作用。包括如何覆盖全局参数、配置文件的安全要求、各种配置项如CheckHostIP、ForwardX11等的具体功能与设置建议。

一般不需要修改OpenSSH客户端配置文件。对于给定用户,共有两个配置文件:~/.ssh/config(用户专用)和/etc/ssh /ssh_config(全局共享)。要按照该顺序读取这些文件,对于给定的某个参数,它使用的是读取过程中发现的第一个配置。用户可以通过以下方式将全 局参数设置覆盖掉:在自己的用户配置文件中设置同样的参数即可。在ssh或scp命令行上给出的参数的优先级要高于这两个文件中所设置的参数的优先级。

用户的~/.ssh/config文件必须由该用户所有(他是目录"~/"的所有者),并且除了所有者之外任何人都不能写入该文件。否则客户端就会给出一条错误消息然后退出。这个文件的模式通常被设为600,这是因为除了它的所有者之外任何人没有理由能够读取它。

这些配置文件中的配置行包含着声明,这些声明均以某个关键字(不区分大小写)开头,后面跟着空格,最后是参数(区分大小写)。可以使用关键字Host,让声明只作用于特定的系统。Host声明作用于它与下一条Host声明之间的所有配置行。

CheckHostIPyesno

 

  如果将其设置为 yes (默认值),那么除了用 known_hosts

  文件中的主机名之外,还可以采用 IP 地址来识别远程系统。

  若设置为 no ,则只使用主机名。将 CheckHostIP 设置为 yes

  可以提高系统的安全性。

ForwardX11yesno

 

  如果设置为 yes ,那么自动通过一条安全通道以不可信模式

  来转发 X11 连接,但是并不设置 shell 变量 DISPLAY

  如果 ForwardX11Trusted 也设置为 yes, 那么连接以可信模式转发。

  此外,可以在命令行上使用选项 -X 以不可信模式重定向 X11 连接。

  这个参数的默认值是 no 。要想让 X11 转发起作用,还必须将服务器

  上的 /etc/sshd_config 文件中的 X11Forwarding 设置为 yes (参见 8.4.6 节)。

  更多信息请参见 8.6 节的“ X11 转发”部分。

ForwardX11Trustedyesno

 

   ForwardX11 一块使用时, ForwardX11 必须设置为 yes (默认),

  这个声明才能起作用。当这个声明设置为 yes (默认),而

  ForwardX11 也设置为 yes 时,这个声明将设置 shell 变量 DISPLAY

  并给予远程 X11 客户端对原来的(服务器) X11 显示的完全访问权限。

  此外,可以在命令行上使用选项 -Y 以可信模式重定向 X11 连接。

  这个声明的默认值是 no 。要想让 X11 转发起作用,还必须将服务

  器上的 /etc/sshd_config 文件中的 X11Forwarding 设置为 yes (参见 8.4.6 节)。

  更多信息请参见 8.6 节的“ X11 转发”部分。

HashKnownHosts

 

  当设置为 yes 时, OpenSSH 会将文件 ~/.ssh/known_hosts 中的

  主机名和地址进行散列。当设置为 no 时,主机名与地址将以明

  文形式写入。 UbuntuLinux 将这份声明设置为 yes 来提高系统的

  安全性。关于 known_hosts 文件的更多信息请参见 8.3.3 节第 2 小节。

Hosthostnames

 

  指定它后面的(直到下一个主机声明为止)声明只适用于与

hostnames 相匹配的主机。 Hostnames 可以包含 ? * 通配符。

  单个的 * 指定所有主机。如果没有这个关键字,任何声明都适用于所有主机。

HostbasedAuthenticationyesno

 

  当设置为 yes 时,尝试进行 rhosts 身份验证。对于安全性要求较

  高的系统,设置为 no (默认)。

HostKeyAlgorithmsalgorithms

 

  其中 algorithms 是一个由逗号隔开的算法列表,客户端按照优

  先级顺序依次使用这些算法。从 ssh-rsa ssh-dss 中选择 algorithms

  (默认值为“ ssh-rsa,ssh-dss )。

Portnum

  使 OpenSSH 通过 num 端口与远程系统连接。默认值为 22

StrictHostKeyCheckingyesno ask

 

  决定 OpenSSH 是否将主机密钥添加到用户的 known_hosts 文件

  中以及如何添加。如果将该选项设置为 ask ,那么在连接新系

  统时会询问是否添加主机密钥;如果设置为 no ,就会自动添加

  主机密钥;如果设置为 y e s ,就要求手工添加主机密钥。若将

  参数设置 yes ask ,则当某系统的主机密钥发生改变之后,

  OpenSSH 会拒绝连接到该系统。对于安全性要求较高的系统,

  请将此参数设置为 yes ask 。默认为 ask

TCPKeepAliveyesno

 

  如果设置为 yes (默认值),就定期检查连接是否存活。

  如果服务器崩溃或者由于其他原因导致连接死掉,那么这种

  检查将会导致 ssh scp 连接中断,即便连接只是暂时死掉。

  若将这个参数设置为 no ,则会导致客户端不去检查连接是否存活。

  这项声明用到了 TCP keepalive 选项,它未经加密,并且容易受到

  IP 欺骗(参见术语表)。如果希望采用能够防止 IP 欺骗的替代品,

  那么可以采用基于服务器的相关技术,请参见 8.4.6 节中的“ ClientAliveInterval ”。

Username

 

  指定登录系统时所用的用户名。可用 Host 声明来指定系统。

  该选项意味着,在远程系统上登录时,如果使用的用户名不同

  于在本地系统上登录所用的用户名,那么不必在命令行上输入用户名。

<think> 根据用户的问题,用户希望解决公网服务器缺少~/.ssh/authorized_keys文件的问题。结合引用内容,我们可以知道authorized_keys文件用于存储公钥以实现SSH免密登录。如果该文件不存在,我们可以手动创建。 解决方案: 1. 登录到公网服务器(假设以root用户登录)。 2. 进入.ssh目录(如果不存在则创建)。 3. 创建authorized_keys文件并设置正确的权限。 注意:权限设置非常重要,错误的权限可能导致SSH服务器拒绝使用该文件。 具体步骤: 步骤1:登录公网服务器(通过SSH或其他方式)。 步骤2:检查并创建.ssh目录(如果不存在): mkdir -p ~/.ssh 步骤3:创建authorized_keys文件(如果不存在)并添加公钥: touch ~/.ssh/authorized_keys 步骤4:将客户端的公钥(如id_rsa.pub文件的内容)追加到authorized_keys文件中。可以通过复制粘贴,或者使用命令(如果已经登录到服务器且公钥内容在剪贴板): echo "公钥内容" >> ~/.ssh/authorized_keys 或者使用文本编辑器(如vi)打开文件并粘贴。 步骤5:设置正确的权限: chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys 步骤6:确保文件的所有者是正确的用户(即当前登录用户)。 另外,根据引用[1][3],生成密钥对使用的是ssh-keygen命令,并且将公钥内容追加到authorized_keys文件中。引用[5]也提到了查看公钥的方法(cat ~/.ssh/id_rsa.pub)以及公钥的存放位置。 如果用户是在配置Jenkins等自动化工具的SSH连接,那么需要将Jenkins容器中生成的公钥(通过ssh-keygen生成)添加到公网服务器的authorized_keys文件中。 注意:如果公网服务器是Linux系统,且SSH服务配置未修改,默认是启用公钥认证的。如果修改过,可能需要检查/etc/ssh/sshd_config文件,确保以下配置: PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys 修改配置后需要重启SSH服务(如:systemctl restart sshd)。 根据引用[1]中提到的,如果遇到主机密钥验证问题,可以设置StrictHostKeyChecking为no,并指定UserKnownHostsFile为/dev/null(但这样会降低安全性,仅建议在测试环境使用)。 因此,总结解决方法就是创建文件并设置权限,然后添加公钥内容。 生成相关问题: 1. 如何生成SSH密钥对? 2. 如何设置SSH免密登录? 3. SSH连接时出现权限错误(如bad permissions)如何解决? 4. 如何修改SSH服务配置以启用公钥认证? 5. 在Docker容器中如何生成SSH密钥并配置免密登录? 注意:用户的问题仅针对缺少authorized_keys文件,所以主要回答此问题,相关问题作为扩展。 </think>### 公网服务器缺少 `~/.ssh/authorized_keys` 文件的解决方法 当公网服务器缺少 `~/.ssh/authorized_keys` 文件时,可按以下步骤手动创建并配置: #### 1. **创建 `.ssh` 目录文件** ```bash # 登录公网服务器 ssh root@your-server-ip # 创建 .ssh 目录(若不存在) mkdir -p ~/.ssh # 创建 authorized_keys 文件 touch ~/.ssh/authorized_keys ``` #### 2. **设置严格的文件权限** ```bash chmod 700 ~/.ssh # 目录权限 chmod 600 ~/.ssh/authorized_keys # 文件权限 ``` > **关键说明**:SSH 要求严格的权限设置,否则会拒绝认证[^1][^3]。 #### 3. **添加公钥内容** 将客户端的公钥(如 `id_rsa.pub`)内容追加到文件中: ```bash # 方法1:直接粘贴(需登录服务器) vi ~/.ssh/authorized_keys # 粘贴公钥内容后保存 # 方法2:通过命令追加(从本地操作) ssh root@server "echo '公钥内容' >> ~/.ssh/authorized_keys" ``` #### 4. **验证SSH配置** 检查服务器端的 SSH 配置: ```bash vi /etc/ssh/sshd_config ``` 确保包含以下配置: ```ini PubkeyAuthentication yes # 启用公钥认证 AuthorizedKeysFile .ssh/authorized_keys # 指定公钥文件路径 ``` 重启 SSH 服务生效: ```bash systemctl restart sshd ``` #### 5. **调试连接问题** 若仍无法连接,查看日志定位原因: ```bash tail -f /var/log/auth.log # Ubuntu/Debian tail -f /var/log/secure # CentOS/RHEL ``` 常见错误: - `Permission denied (publickey)` → 检查文件权限或公钥格式 - `No such file or directory` → 确认文件路径正确 --- ### 关键注意事项 1. **权限问题** `.ssh` 目录权限必须是 `700`,`authorized_keys` 文件权限必须是 `600`[^1][^3]。 2. **密钥格式** 确保公钥格式为单行文本,例如: `ssh-rsa AAAAB3NzaC... user@host`[^2][^5] 3. **SELinux 影响** 若服务器启用 SELinux,需修复上下文: ```bash restorecon -Rv ~/.ssh ``` 4. **用户目录所有权** 确保 `$HOME` 目录属于相应用户: ```bash chown -R user:user /home/user ``` --- ### 完整操作示例 ```bash # 在客户端生成密钥对(Jenkins/本地机器) ssh-keygen -t rsa -b 2048 # 默认保存到 ~/.ssh/id_rsa.pub # 将公钥推送到服务器 ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip # 若 ssh-copy-id 不可用,使用手动追加: cat ~/.ssh/id_rsa.pub | ssh user@server "mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys" ``` 通过以上步骤,即可解决因缺少 `authorized_keys` 文件导致的 SSH 连接问题[^2][^3][^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值