贡献者: 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_host
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。