ssh 笔记

备忘录

本文最后更新于 <span id="expire-date"></span> 天前,文中部分描述可能已经过时。

ssh 使用及问题总结。

局域网控制

最近发现在局域网下,用主力机控制备用机玩玩命令挺爽的。
但还有一些不便之处,比如 ssh 连接自动断开的频率偏高、需要重复

查完资料进行如下配置,方便后续玩耍。
备用机(联想小新8804F)作为服务端,主力机为客户端。

简单连接

备用机运行以下命令
whoami 查看用户名,返回 u0_a205
ifconfig 查看 ip 地址
passwd 设置密码,确认两遍。(输入过程中不显示字符)
sshd 启动服务

主力机运行
ssh u0_a205@192.168.43.111 -p 8022
输入密码,成功连接。
备用机之前安装过 aria2,所以直接运行 bash aria2.sh 进行启动。
如果有什么需要挂机下载的任务,丢给它就好了。

设置超时断开

备用机配置
备用机在 Termux 下运行

micro $PREFIX/etc/ssh/sshd_config

给 sshd_config 文件加上两行参数

ClientAliveInterval 600
ClientAliveCountMax 6

第一行为服务器端向客户端请求消息的时间间隔,单位 s。
第二行为最大无响应次数。

按照以上配置,600*6=3600 秒,即发现客户端超过 1 小时无响应,则自动断开。

主力机配置
micro .ssh/config
修改 .ssh 文件夹下面的 config 文件,添加以下内容

# 联想小新8804F
Host 8804 # 随便设置的别名
HostName 192.168.43.111
Port 8022
User root
ServerAliveInterval 60
ServerAliveCountMax 10

密钥配对(免密码链接)

主力机生成密钥

ssh-keygen -t rsa -f ~/.ssh/id_rsa.8804 -C "邮箱"

这样一来 .ssh 文件夹下面又多了两个文件,id_rsa.8804.pub 和 id_rsa.8804,不带 pub 的是私钥,不可外泄!
将公钥内容复制后添加到备用机的 .ssh/authorized_keys

运行 ssh 8804,从此无需重复输入密码。

ip 经常变化怎么办?🤔

毕竟我们很难保证只用一种局域网连接方式😣
办法也是有滴:

Host .*
HostName 192.168%h
Port 8022
User root
ServerAliveInterval 60
ServerAliveCountMax 10
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa.8804

假如更改连接方式后,备用机的 ip 变成了 192.168.49.1,那么只要输入 ssh .49.1 ,就能成功连接。

解决文件权限问题

报错预览:

$ ssh -T git@github.com
Load key "/data/data/com.termux/files/home/.ssh/id_rsa": Permission denied
git@github.com: Permission denied (publickey).

刷机重装 Termux 后,恢复 ssh 密钥:

将原先备份好的 ssh.zip 下载、移动至 Termux 的 home 目录,解压并配置相关权限。

unzip ssh.zip .ssh
cd .ssh
ls -l
whoami
pkg i tsu
sudo chown u0_a295 *
sudo chgrp u0_a295 *
sudo chmod 644 *.pub
ls -l
ssh -T git@github.com

万一出现 permissions are too open 之类的报错,检查密钥的权限,改为 600 。

git clone 超级慢

Windows 的网络代理真是个蛋疼玩意儿,从 GitHub 的私有库获取文件花上老半天🤬

参考这篇 macOS 给 Git(Github) 设置代理(HTTP/SSH)

分辨需要设置的代理

HTTP 形式:
git clone https://github.com/owner/git.git

SSH 形式:
git clone git@github.com:owner/git.git

ssh 这么安全简便好用,果断选择 ssh,修改 .ssh/config

# github
Host *github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
ProxyCommand connect -S 127.0.0.1:7890 -a none %h %p

7890 是 Clash 的默认端口。

之前搜出的解决方案大多是教人用 http 代理的,可git clone git@*** 这种形式根本不走 http 代理,难道他们都不用 ssh 吗?🥲

干脆也记录一下,命令行逐个输入回车:

git config --global http.proxy "http://127.0.0.1:7890"
git config --global https.proxy "http://127.0.0.1:7890"

有机会研究一下 wsl 好不好用吧🧐

参考

评论

您所在的地区可能无法访问 Disqus 评论系统,请切换网络环境再尝试。