贡献者: addis
ssh name@111.222.333.444 -p 端口号
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 service ssh restart 才会生效
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 会更方便,如果事先允许密码登录的话
~/.ssh/authorized_keys 中寻找 public key,然后用其加密一个随机字符串给 client,client 用 private key 解密,将字符串的 MD5 hash 发给 server,server 一对照 MD5 如果吻合,开始连接. (其实我猜 host 还需要发送一个密钥用于 ssh 通讯,要不然 client 发给 host 的东西就无法加密了)
/etc/hosts 中添加 ip 和对应的名字即可.
~/.hosts,然后在 ~/.bashrc 修改环境变量 export HOSTALIASES=~/.hosts
~/.ssh/config,设置 host 的名字,就可以用名字而不是 ip 登录了
Host 别名
Hostname 网址或者ip或者/etc/hosts中的名字
User 登录的用户名
Port 端口号
PubKeyAuthentication yes
IdentityFile [./path/to/key] # ssh-keygen 生成的 key
# 简单的设置例如(默认项可以忽略,例如端口 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 的时候说 permission id_rsa too open,用 chmod 700 id_rsa* 即可,其中 7 变为二进制是 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 中的记录.
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
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:本地端口号 用户名@转发服务器