SSH连接
基本命令
ssh [user]@[remote address] <-p [port]>
ssh [user]@[remote address] <command>
ssh [user]@[remote address] 'bash -s' < name.sh
cat name.ssh | ssh [user]@[remote address]
ssh -t sever1 -t ssh server2 -t ssh server3
sudo netstat -anp | grep ESTABLISHED | grep ssh | awk '{print $ 5}'
配置SSH连接
apt update && sudo apt install -y openssh-server
ssh-keygen
cd ~/.ssh;ls
ssh-copy-id [user]@[remote address]
ssh [user]@[remote address] 'mkdir -p .ssh&& cat >> ./ssh/authorized_keys' < ~/.ssh/id_rsa.pub
- 如果远程主机不支持免密登录或root登录,需要修改配置
vim /etc/ssh/sshd_config
service sshd restart
systemctl restart sshd
config配置文件
Host [another name]
HostName [remote address]
User [user]
Port [port]
IdentityFile ~/.ssh/id_rsa
- 文件位置
- 位于
~/.ssh/config
和/etc/ssh/ssh_config
- 优先级
man ssh_config
查看完整手册
- Host匹配格式
*.example.com
匹配以 .example.com 结尾。
!*.dialup.example.com, *.example.com
以 ! 开头是排除的意思。
192.168.0.?
匹配 192.168.0.[0-9] 的 IP
- 避免长时间不操作时SSH自动断开
Host *
ServerAliveInterval 60
保持程序后台运行
- 有时候你想要在远程的机器上跑一个需要长时间运行的程序,比如一些计算,然后当你睡了一觉再登入远程的机子上却发现什么结果都没有。这是因为一旦 ssh 进程退出,所有它之前启动的程序都会被杀死
- 可以通过
nohup
保持shell退出后仍然运行
- 也可以通过
tmux
实现
通过http或者socks代理连接服务器
ssh -o "ProxyCommand nc -X 5 -x <porxy address>:<proxy port> %h %p" <server user>@<server address>
Host *
ProxyCommand nc -X 5 -x <porxy address>:<proxy port> %h %p
- nc需要使用openbsd版本,traditional版本没有-X参数
apt install -y netcat-openbsd
sudo update-alternatives --config nc
选择版本
- 其中%h表示目标地址,%p是目标端口
-X
指定代理协议
5
是socks5
4
是socks4
connect
是http
-x
指定代理地址[:端口]
- 如果没有指定端口,采用协议常用端口
- HTTP协议为3128端口
- SOCKS5协议为1080端口
- 注意:不要使用nc处理HTTP协议,有bug,更换为corkscrew
Host *
ProxyCommand corkscrew <porxy address> <proxy port> %h %p
scp
scp -P [port] /path/to/local/file [user]@[remote address]:/path/to/remote/dirctory
scp /path/to/local/file [another name]:/path/to/remote/dirctory
scp -r [another name]:path/to/remote/dirctory .
stfp
sftp [user]@[remote address] <-P [port]>
> get /path/remote_file
> put local_file
>ls
>pwd
>exit
>cd <path>