ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

【ssh】配置ssh远程连接和免密登录:从rsa密钥对到Remote-SSH的完整实践

【ssh】配置ssh远程连接和免密登录:从rsa密钥对到Remote-SSH的完整实践 1. 从一台本地开发机连上远程服务器到底卡在哪ssh 远程连接和免密登录这件事说简单也简单说容易翻车也是真的容易翻车。核心链路其实就四步本地生成 rsa 密钥对、把公钥下发到远程服务器、写一份 ssh config 骨架、用 ssh -T 和 Remote-SSH 两步验证。听起来像是一条直线但实际操作里很多人会在「公钥到底传没传对」「sshd_config 改完没重启」「Remote-SSH 读的是哪个 config」这几个点上反复打转。这篇面向的是这样一类场景你手头有一台本地开发机Windows、macOS 或 Linux 都行有一台远程服务器或者 Linux 开发板你想在本地终端里一条ssh 别名就登进去还想在 VS Code 里用 Remote-SSH 直接编辑远程代码不用每次输密码。适合刚接触 ssh 免密登录的新手也适合之前配过但没配利索、想重新梳理一遍链路的同学。我会把可复制的~/.ssh/config和/etc/ssh/sshd_config片段都给出来再给出ssh -T和 Remote-SSH 连接两步验证动作。中间踩过的坑比如权限太开放导致公钥被拒、config 里 Host 写错导致 Remote-SSH 找不到主机也会一并说清楚。跟着做你应该能在半小时内把这条链路跑通。2. 前置准备TaoToken 与本地环境确认在正式配 ssh 之前先把两件事确认掉本地有没有 ssh 客户端远程有没有 ssh 服务端。这一步不做后面报错会很难定位。本地这边Windows 10/11 自带 OpenSSH 客户端macOS 和主流 Linux 发行版也默认带。终端里敲ssh -V能打印版本号就说明客户端没问题。远程服务器这边需要装 openssh-server。Debian/Ubuntu 系用sudo apt update sudo apt install openssh-server装完一般会自动拉起服务用sudo systemctl status ssh看状态看到active (running)就对了。如果你在配 ssh 的过程中还想顺手把模型调用、API Key 管理这类开发配套也理顺可以了解下 TaoToken。它的官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。它提供模型对话、Coding Plan、控制台和 API Keys 管理这些能力适合在远程开发时把模型调用和密钥管理放在一个地方。后面第 6 节我会给出具体的 CTA 分流这里先记一下入口就行。回到 ssh。远程服务器还需要确认一件事sshd 监听端口和是否允许密码登录。默认端口 22如果你改过端口后面 config 里要对应改。允许密码登录这一项在免密配好之前先别关不然公钥没传上去你就彻底进不去了。等免密验证通过再考虑关掉密码登录。3. 可复制配置rsa 密钥对、公钥下发与 config 骨架3.1 生成 rsa 密钥对本地终端执行ssh-keygen -t rsa -b 4096 -C your_emailexample.com-t rsa指定算法-b 4096指定长度-C是注释方便你以后认出这把钥匙是谁的。回车后会问保存路径默认~/.ssh/id_rsa直接回车即可。接着问 passphrase如果追求完全免密就留空回车两次如果在意安全可以设一个配合 ssh-agent 也能少输几次。生成完~/.ssh/下会多出两个文件id_rsa是私钥绝对不能外传id_rsa.pub是公钥就是要传到服务器的那把。3.2 把公钥下发到远程服务器最省事的方式是ssh-copy-idssh-copy-id -i ~/.ssh/id_rsa.pub userremote_ip它会提示你输入一次远程密码然后把公钥追加到远程的~/.ssh/authorized_keys里并帮你把权限设好。如果本地没有ssh-copy-id比如某些 Windows 环境可以手动来cat ~/.ssh/id_rsa.pub | ssh userremote_ip mkdir -p ~/.ssh chmod 700 ~/.ssh cat ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys这里权限很关键。~/.ssh必须是 700authorized_keys必须是 600远程家目录不能是 777。权限太开放sshd 会直接拒绝使用公钥报错通常是Authentication refused: bad ownership or modes。3.3 写一份 ssh config 骨架本地~/.ssh/config加上这段Host myserver HostName 192.168.1.100 User your_user Port 22 IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes ServerAliveInterval 60 ServerAliveCountMax 3Host后面是你自己起的别名以后ssh myserver就能连。HostName填真实 IP 或域名User填远程用户名IdentityFile指向私钥。IdentitiesOnly yes避免 ssh 拿一堆钥匙挨个试能加快连接。ServerAliveInterval和ServerAliveCountMax是保活防止长时间不操作被断开。如果你有多台机器可以继续往下加 Host 段互不影响。3.4 远程 sshd_config 关键片段远程服务器上编辑/etc/ssh/sshd_config确认这几项Port 22 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication yes PermitRootLogin no AllowUsers your_userPubkeyAuthentication yes是免密登录的总开关必须开。PasswordAuthentication在免密验证通过前先保持 yes验证通过后可以改成 no。AllowUsers限制允许登录的用户按需加。改完重启服务sudo systemctl restart ssh注意不同发行版服务名可能是ssh或sshd用systemctl status确认一下。4. 两步验证ssh -T 与 Remote-SSH 连接4.1 第一步ssh -T 验证免密本地终端执行ssh -T myserver-T表示不分配伪终端适合做连接测试。如果免密配好了你会直接进到远程 shell或者看到远程返回的一行信息全程不提示输密码。如果还提示输密码说明公钥没生效回到第 5 节排查。想更明确地看认证过程可以加-vssh -v myserver输出里会打印Offering public key、Server accepts key这类信息能直接看出卡在哪一步。4.2 第二步Remote-SSH 连接VS Code 里装好 Remote-SSH 插件按CtrlShiftP输入Remote-SSH: Open SSH Configuration File选择你的~/.ssh/config。确认里面能看到刚才写的Host myserver。然后CtrlShiftP输入Remote-SSH: Connect to Host选myserver。第一次连接VS Code 会在远程装一个 vscode-server等它装完左下角会显示SSH: myserver这时候你打开文件夹、编辑文件都是直接在远程操作。终端里pwd一下路径是远程的就说明 Remote-SSH 通了。如果 Remote-SSH 连不上但ssh -T能连上多半是 VS Code 读的 config 路径不对或者 Host 别名里有空格、特殊字符。检查Remote-SSH: Open SSH Configuration File打开的是不是你改的那个文件。5. 本篇常见错排查5.1 公钥传了还是要密码先看远程~/.ssh/authorized_keys里有没有你的公钥内容再看权限。ls -ld ~/.ssh应该是 700ls -l ~/.ssh/authorized_keys应该是 600。家目录权限用ls -ld ~看不能是 777 或 775 这种组可写的。改权限chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chmod 755 ~5.2 sshd_config 改了没生效改完必须重启 ssh 服务。另外注意有些发行版把配置拆到/etc/ssh/sshd_config.d/目录下主文件里的配置可能被覆盖。用sshd -T可以打印最终生效的配置确认pubkeyauthentication是 yes。5.3 Remote-SSH 报 Could not establish connection先在本地终端ssh myserver确认能连。如果终端能连、VS Code 不能检查 VS Code 的 Remote-SSH 设置里remote.SSH.configFile是否指向正确的 config。另外 Windows 上路径写法要注意~/.ssh/config有时要写成C:\Users\你的用户名\.ssh\config。5.4 连接一段时间就断这是保活没配。在 config 里加ServerAliveInterval 60和ServerAliveCountMax 3本地每 60 秒发一次心跳连续 3 次没响应才断。远程 sshd_config 里也可以加ClientAliveInterval 60和ClientAliveCountMax 3双向保活更稳。5.5 端口不是 22如果远程改了端口config 里Port要对应改ssh-copy-id也要加-p参数ssh-copy-id -p 2222 -i ~/.ssh/id_rsa.pub userremote_ip排查的时候ssh -v是你的好朋友它会告诉你连接卡在 TCP、认证还是别的环节。6. 配好之后把开发配套也理顺ssh 免密和 Remote-SSH 跑通之后你基本就获得了「本地编辑、远程运行」的体验。接下来如果要在远程环境里做模型调用、管理 API Key或者跑一些长期编码任务可以按下面的路径分流排障和接入相关的问题先看 API Keys 和接入文档入口是 https://taotoken.net/api-keys 和 https://taotoken.net/doc 这两个页面能帮你把密钥和接入方式理清楚。想先验证模型对话效果直接去模型对话页面 https://taotoken.net/chat 试一下。如果你是要长期在远程做编码或者跑 AgentCoding Plan 更合适入口是 https://taotoken.net/coding-plan 。控制台在 https://taotoken.net/console ClaudeCodeAnthropic 相关入口是 https://taotoken.net/claudecode-anthropic 。这些链接都带上utm_sourcetaotoken_aicg_blog_endutm_campaignrewrite方便你从这篇直接跳过去。ssh 这条链路配好一次后面基本不用再动把精力留给真正要写的代码就好。
返回列表