赞
踩
目录
Secure Shell (安全外壳协议,简称 SSH )是一种加密的 网络传输协议 ,可在不安全的网络中为网络服务提供安全的传输环境 。
OpenSSH 的客户端是二进制程序 ssh。它在 Linux/Unix 系统的位置是/usr/local/bin/ssh,Windows 系统的位置是\Program Files\OpenSSH\bin\ssh.exe
查看是否安装了 ssh 服务
ssh -V
- # 基本命令
- ssh hostname
- # 指定登录用户
- ssh user@hostname
- # 不用 @ 分隔
- ssh -l user hostname
- # 指定端口号(默认 22)
- ssh -p port user@hostname
- # 配置用户,主机名和端口
- # node1 需要配置在 Users/用户名/.ssh/config 配置文件中
- # Host node1
- # Hostname xxx.xxx.xxx.xxx
- # Port port
- # User roots
- ssh node1
- # 执行远程命令
- ssh user@hostname command
- # 需要互动式 shell 环境
- ssh -t user@hostname command
SSH 客户端的全局配置文件是/etc/ssh/ssh_config,用户个人的配置文件在~/.ssh/config,优先级高于全局配置文件。
除了配置文件,~/.ssh目录还有一些用户个人的密钥文件和其他文件。下面是其中一些常见的文件。
例举一些配置
- # 以 rsa 算法为例
- ssh-keygen -t rsa
生成的密钥文件默认就会是~/.ssh/id_rsa(私钥)和~/.ssh/id_rsa.pub(公钥)。
用户公钥保存在服务器的 ~/.ssh/authorized_keys文件
所以需要将刚生成的密钥中的公钥文件 (id_rsa.pub) 复制到需要登录的ssh服务器的 ~/.ssh/authorized_keys 文件中
如果不想复制,也可以通过命令行完成
- # 也可以通过命令行来上传
- ssh-copy-id -i key_file user@hostname
至此,已经完成 SSH 的最基本的功能 - 免密登录目标服务器
当然, ssh 的功能不仅于此
动态转发指的是,本机与 SSH 服务器之间创建了一个加密连接,然后本机内部针对某个端口的通信,都通过这个加密连接转发。它的一个使用场景就是,访问所有外部网站,都通过 SSH 转发。
ssh -D local-port root@remote-host -p remote-port -N
这种转发采用了 SOCKS5 协议。访问外部网站时,需要把 HTTP 请求转成 SOCKS5 协议,才能把本地端口的请求转发出去。
curl -x socks5://localhost:2121 https://www.baidu.com
本地转发(local forwarding)指的是,SSH 服务器作为中介的跳板机,建立本地计算机与特定目标网站之间的加密连接。
ssh -L local-port:target-host:target-port root@remote-host -p remote-port
ssh -L 3306:127.0.0.1:3306 -p 40022 root@xx.xx.xx.xx
它跟本地转发正好反过来。建立本地计算机到远程计算机的 SSH 隧道以后,本地转发是通过本地计算机访问远程计算机,而远程转发则是通过远程计算机访问本地计算机。
ssh -R remote-port:target-host:target-port -N root@remote-host -p remote-port
可以搭建一个简易 VPN
处于安全考虑,我们一般不会将 mysql,redis 等数据库中间件的端口号暴露出来,此时就可以通过本地转发来进行访问
- # 本地的3306,6379 端口转发到目标服务器(开发机)的3306,6379 端口
- ssh -NL 3306:127.0.0.1:3306 -NL 6379:127.0.0.1:6379 -p 22 user@xx.xx.xx.xx
又或者,有些第三方服务部署在内网服务器B,本地只能访问内网服务器A,而A,B之间是互通的。
ssh -NL 80:B-host:80 user@A-host:A-port
scp是 secure copy 的缩写,相当于cp命令 + SSH,底层还是 SSH 协议
- # 基本语法
- scp -P port source user@hostname:target
- # 将本机整个目录拷贝到远程目录下
- scp -r ./dir user@hostname:/remote_dir/
- # 将本机目录下的所有内容拷贝到远程目录下
- scp -r .dir/* user@hostname:/remote_dir/
- # 基本语法
- scp user@hostname:source target
- # 拷贝一个远程目录到本机目录下
- scp -r user@hostname:/remote_dir .dir/
- # 拷贝远程目录下的所有内容,到本机目录下
- scp -r user@hostname:/remote_dir/* .dir/
- # 基本语法
- scp user@hostname1:source user@hostname2:target
rsync 是一个常用的 Linux 应用程序,用于文件同步
它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp和mv命令。
linux 系统
- # Debian
- sudo apt-get install rsync
-
- # Red Hat
- sudo yum install rsync
-
- # Arch Linux
- sudo pacman -S rsync
windows 系统
小编没有找到 rsync windows 的版本,但是找到一个叫 cwRsync 的软件,看名字应该是基于 Cygwin 和 rsync 的一个软件。但是官方好像已经不提供免费的版本了。
rsync -r source destination
- # 排除某个目录下的
- rsync -av --exclude 'dir1/*' source/ destination
- # 多个排除
- rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination
- rsync -av --exclude={'file1.txt','dir1/*'} source/ destination
- # 排除多个,记录在文件中
- rsync -av --exclude-from='exclude-file.txt' source/ destination
rsync -av source/ username@remote_host:destination
rsync -av username@remote_host:source/ destination
sftp是 SSH 提供的一个客户端应用程序,主要用来安全地访问 FTP。因为 FTP 是不加密协议,很不安全,sftp就相当于将 FTP 放入了 SSH
sftp username@hostname
进入 sftp 交互界面,类似于 ftp
操作本地的文件命令前加个 l, 如 lls , lcd , lmkdir 等
注意到一些常用的 linux 文件传输工具走的大多也是 sftp 协议
如 filezilla
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。