SSH基本用法(包括scp和sftp)

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] 
 
# 实现多步跳;因为有的服务器指限定特定的ip访问
ssh -t sever1 -t ssh server2 -t ssh server3 

# 查看有哪些IP通过SSH连接了服务器
sudo netstat -anp | grep ESTABLISHED | grep ssh | awk '{print $ 5}'

配置SSH连接

# 被远程登录的主机必须安装ssh server(sshd)
apt update && sudo apt install -y openssh-server

# 客户端生成公钥和私钥
ssh-keygen # 一直回车
cd ~/.ssh;ls # 此时可以看你到公钥文件id_rsa.pub和私钥文件id_rsa

# 客户端将共钥交给远程主机,这样就可以免密登录了
ssh-copy-id [user]@[remote address]
# mac安装可以通过brew安装ssh-copy-id
# 保存在服务器的authorized_keys文件中
# 可以通过以下命令手工拷贝
ssh [user]@[remote address] 'mkdir -p .ssh&& cat >> ./ssh/authorized_keys' < ~/.ssh/id_rsa.pub
  • 如果远程主机不支持免密登录或root登录,需要修改配置
 #step1: 
 vim /etc/ssh/sshd_config
 
 #step2: 
 #把PubkeyAuthentication 改为 yes
 #取消PermitRootLogin prohibit-password的注释并改为PermitRootLogin yes
 
 #step3: 
 service sshd restart
 #或者
 systemctl restart sshd

config配置文件

  • 配置服务器别名,避免每次登录都要输入地址和用户
# 在 ~/.ssh/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自动断开
# 每160秒发送一个心跳包
Host *
    ServerAliveInterval 60

保持程序后台运行

  • 有时候你想要在远程的机器上跑一个需要长时间运行的程序,比如一些计算,然后当你睡了一觉再登入远程的机子上却发现什么结果都没有。这是因为一旦 ssh 进程退出,所有它之前启动的程序都会被杀死
  • 可以通过nohup保持shell退出后仍然运行
  • 也可以通过tmux实现

通过http或者socks代理连接服务器

# 使用-o参数实现
ssh -o "ProxyCommand nc -X 5 -x <porxy address>:<proxy port> %h %p" <server user>@<server address>

# 或者使用~/.ssh/config配置文件实现
# *对全局有效,就不需要在命令行中进行代理配置了
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

# 下载文件到本地
# -r 可传送文件夹
# 远程路径不以/开头默认在家目录~下
# 本地路径默认为当前目录 .
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> #更改路径
发布了161 篇原创文章 · 获赞 19 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/winter_wu_1998/article/details/101567210