SSH Notes¶
Install on Debian12¶
基本使用¶
生成密钥对
-t可以指定使用的非对称加密算法
id_rsa.pub文件拷贝到远程服务器的~/.ssh/authorized_keys文件中。
检查本机.ssh的属性 + 本地 .ssh 目录和 id_rsa 文件权限要求: + .ssh 目录的属性是 700 + .ssh 目录下的 id_rsa 私有密钥的属性是 600 + .ssh 目录下的 id_rsa.pub 公用密钥的属性是 644 + 远程 .ssh 目录和 authorized_keys 文件权限要求: + .ssh 目录的属性是 700 + .ssh 目录下的 authorized_keys 私有密钥的属性是 600
修改sshd_config
#sshd_config
PasswordAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
ssh命令参数¶
-o: 指定配置选项StrictHostKeyChecking=no: 忽略服务器Key验证,可以让第一次访问不用确认服务器KeyUserKnownHostsFile=/dev/null: 可以不让服务器的key保存在本地的known_hosts文件中,适用于不能保存和修改本地文件的情况IdentityFile=/path/to/my_private_key: 指定密钥文件-N -f: 不执行远程命令,将ssh挂载在后台。适用于只需要打开端口,不用执行任何远程命令的清空-L: 设置本地端口转发,当ssh到192.168.7.23时,将本地的25443端口转发到192.168.6.254的443端口。-R: 设置远程端口转发。若要绑定到本地的所有接口,需要在sshd_config中修改为GatewayPorts yes-D: 设置动态转发端口,当本地客户端链接到2008端口,连接就会被转发到远程主机,然后被转发成为ssh服务器的动态端口。-o "ProxyCommand ssh -W %h:%p <jump_server>": 通过跳板机连接目标主机-J: ProxyJump选项,简化了通过跳板机连接目标主机的命令-v: 启用SSH客户端的Verbose模式,可以详细输出调试信息便于调试、-i: 在进行ssh连接时,指定认证所使用的私钥
.ssh/config配置¶
基本配置
# .ssh/config
Host jetson
HostName 192.168.7.23
LocalForward 25443 192.168.6.254:443
LocalForward 33062 db2:3306
User Squarehuang
Port 22
ssh Multiplexing加速:克服了TCP连接的消耗,即对于多次连接会话,只会使用一个TCP连接。OpenSSH使用现有的TCP连接来实现多个SSH会话,这种方式降低了新建TCP连接的负载。
tips:OpenSSH 5.6以上版本支持 加速SSH连接,减少TCP连接的消耗配置所有主机登陆激活ssh multiplexing,压缩以及不检查服务器SSH key
ssh 配置跳板服务器: + 使用ProxyCommand:
- 使用ProxyJump:
- 关闭服务器的ProxyJump:
ssh-agent¶
ssh-agent是一个长时间运行的守护进程(daemon),用途是对解密的专用密钥进行高速缓存。
下面代码会维护一个 ~/.agent.env 文件以及指向当前运行的 ssh-agent 的环境。如果代理失败,将会自动打开一个新的终端窗口并添加密钥,所有后续的终端窗口都可以共享这个窗口
#~/.profile 添加ssh-agent启动脚本 if [ -f ~/.agent.env ]; then . ~/.agent.env -s > /dev/null if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then echo echo "Stale agent file found. Spawning new agent..." eval `ssh-agent -s | tee ~/.agent.env` ssh-add fi else echo "Starting ssh-agent..." eval `ssh-agent -s | tee ~/.agent.env` ssh-add fi
ssh实际应用¶
ssh -R配置反向代理,假设现在你在某个远程集群上,该集群没有外网,那么该如何通过ssh上网呢。一种解决方法是,在远程服务器本地的某个端口上设置http代理,在ssh的时候将那个端口代理到本地的代理端口,那么流量便可以通过本地的代理从而访问外网。