贡献者: addis
ssh name@111.222.333.444 -p 端口号。不指定端口的话默认 22
sudo apt-get install ssh 会安装 ssh server 用于远程控制。确保 port22 是打开的
hostname -I, 或者 ip addr show,或者 ifconfig.
sudo apt install openssh-server
/etc/ssh/sshd_config (注意不是 ssh_config):将 PasswordAuthentication 改为 yes,最后一行加上 AllowUsers 用户名,用户名是 linux 的用户名
sudo systemctl restart sshd 重启才会生效
sudo service ssh --full-restart 也可以重启(WSL1 上没有 systemctl 或者 systemd)
sudo systemctl status ssh,或者 sudo service ssh status
ssh localhost,如果成功,就可以了
"...\putty.exe" user@server.com -pw password 即可(不安全)。
id_rsa 私钥文件用 puttygen.exe,选择菜单 Conversions->Import key 然后 save private key 就可以用这个 private key 设置 putty 自动登录了。
ssh-keygen 生成 key,使用默认路径 ~/.ssh/,会生成 id_rsa 和 id_rsa.pub 两个文件。后者用于加密而不能解密,是 public key,可以给任何人。前者是 private key,用于解密,绝对不能给别人。
~/.ssh/authorized_keys 文件。
sudo ssh,那么设置文件就在 /root/.ssh/ 下,可以把 ~/.ssh 中的文件 copy 过去。
/etc/ssh/sshd_config 是不需要设置的
ssh-copy-id -i /path/to/key.pub SERVERNAME 会更方便,如果事先允许密码登录的话。省略 -i /path/to/key.pub 的话默认就用 ~/.ssh/id_rsa.pub
~/.ssh/authorized_keys 中寻找 public key,然后用其加密一个随机字符串给 client,client 用 private key 解密,将字符串的 MD5 hash 发给 server,server 一对照 MD5 如果吻合,开始连接。 (其实我猜 host 还需要发送一个密钥用于 ssh 通讯,要不然 client 发给 host 的东西就无法加密了)
用户文件夹,.ssh 文件夹和里面的所有文件具有恰当的(不要太开放)权限,具体自行 google。
/etc/hosts 中添加 ip 和对应的名字即可。
~/.hosts,然后在 ~/.bashrc 修改环境变量 export HOSTALIASES=~/.hosts
~/.ssh/config,设置 host 的名字,就可以用名字而不是 ip 登录了
Host 别名
Hostname 网址或者ip或者/etc/hosts中的名字
User 登录的用户名
Port 端口号
PubKeyAuthentication yes
IdentityFile path/to/private_key # ssh-keygen 生成的 key 如 ~/.ssh/id_rsa
# 简单的设置例如(默认项可以忽略,例如端口 22, 当前用户名等)
Host myserver1
Hostname 10.0.2.101
User addis
PubKeyAuthentication 强制使用 key 登录而不用密码。
Unable to negotiate with 40.74.28.9 port 22: no matching host key type found. Their offer: ssh-rsa,就在 config 中加上两行 HostkeyAlgorithms +ssh-rsa 和 PubkeyAcceptedAlgorithms +ssh-rsa。
.ssh/config 中设置好第一个机器的自动登录,再设置第二个机器如下(参考这里)
Host server1
Hostname server1.example.com
User 用户名
IdentityFile ~/.ssh/id_rsa
Host server2
Hostname server2.example.com
User 用户名
IdentityFile ~/.ssh/id_rsa
ProxyJump server1
注意第二个 IdentityFile 应该也是本机的,如果服务器不认识仍然会索取密码。用 ssh-copy-id server2 即可。
ssh 的客户端和服务器端对 .ssh 文件夹和其中文件权限都有很高的要求。如果说用 key ssh 的时候说 permission id_rsa too open,使用以下代码即可:
cd ~/.ssh
chown 用户名 -R .
chmod 700 .
chmod 600 id_rsa
chmod 600 authorized_keys
chmod 600 config
chmod 644 id_rsa.pub
chmod 644 known_hosts
dos2unix *
如果服务器端文件的权限不对会提示 permission denied。
~/.bashrc 或 ~/.profile 上面。可以用以下命令绕过:ssh 用户名@主机名 -t "bash --noprofile --norc" 登进去以后可以调试修改这两个文件,再退出再正常 ssh。
id_rsa 的确是对的,那么有可能是换行符的问题,文件最后必须换行,且必须使用 LF 而不是 CRLF。可以用 dos2unix -ih 文件名 检查。
111 对应 rwx 的三个开关都打开,0 对应 000 没有任何权限,所以 700 就是 owner 有所有权限,其他用户没有任何权限
用户名@主机,其实这个好像没有任何影响,private key 和 public key 都可以复制到许多不同的机器中,让这些机器两两之间互相 ssh,而它们的 ~/.ssh/authorized_keys 中只需要有一条
known_host 没有,就会让确认,确认以后就会把新主机的 id 加入该文件,如果这个 id 以后变了(例如主机重装了 openssh-server)再登录就会出错(为了安全),这时只需要将 known_host 中该主机的记录删除即可。也可以直接把整个文件删除,但这样就所有 ssh 登录都要再确认一次了。
ssh-keygen -R [ip 或者 alias] 可以删除该 server 在 known_host 中的记录。
openssh-server。
ssh -vvv ... 来输出非常多的 debug 信息,看具体哪一步出的问题
sudo vi /etc/ssh/sshd_config 中打开 sshd 的 log 功能,SyslogFacility AUTH,LogLevel DEBUG
sudo systemctl restart sshd,尝试重新链接 ssh
/var/log/auth.log 底部查看日志看看具体问题。
ssh xxx@xxx "命令" 可以直接将某个命令在 host 上执行并退出,而不需要先进入 host 的 shell,执行命令再 exit。用 && 可以将多个命令写在一起依次执行。
ssh xxx@xxx "cat > remote_file" < local_file 可以直接将本地文件用 ssh 直接传到 host,而不需要用 sftp。也可以用 piping,例如 cat local_file | ssh xxx@xxx "cat > remote_file",效果一样
ssh xxx@xxx "cat /path/to/remote_file" > /path/to/local_file 可以将 host 的文件传到本地
ssh -L 本地端口号:目标地址:目标端口号 用户名@转发服务器 其中 本地端口号 永远都是输入这个命令的机器的端口号。目标地址 既可以和 转发服务器 相同也可以不同。其实这个命令就是在通常的 ssh 命令中增加了 -L 本地端口号:目标地址:目标端口号
ssh localhost
ssh -L 6600:120.79.212.166:80 localhost,这样就把本地端口 6600 连接到了 wuli.wiki 的 80 端口
ssh localhost,如果这个 session 结束,那么转发也就结束了。
localhost:6600,就相当于输入了 120.79.212.166:80
120.79.212.166:80 (wuli.wiki),就在本地执行 ssh -L 6500:wuli.wiki:22 用户名@中转服务器
ssh -p 6500 root@localhost,其中 -p 选项用于指定端口,就相当于先 ssh 到中转服务器再 ssh 到 wuli.wiki
: 指定端口,注意前面要加上 ssh://。 例如 git clone ssh://root@localhost:6500/root/github/PhysWikiScan
ssh -R 转发服务器端口号:localhost:本地端口号 用户名@转发服务器
ssh -N -R 中转端口:github.com:443 用户名@中转服务器 可以在本地机器上运行,也可以在中转服务器上运行。运行后,任意浏览器打开 https://中转服务器域名:中转端口 都可以访问 github。