ssh的一些使用
这里贴上阮一峰老师的博客地址
http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
ssh user@host
ssh -p 2222 user@host
生成$HOME/.ssh/authorized_keys文件的原理
ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
#将本地src目录打成tar包然后传输到远程主机用户home目录,并且直接解压,太方便了这条命令
cd && tar czv src | ssh user@host 'tar xz'
#将远程logs目录复制到本地
ssh root@192.168.33.10 'tar cz logs' | tar xzv
sudo ssh root@192.168.0.100 'cat /opt/helm/demo.tar.gz' | tar zxf -
下面将一个重磅炸弹,就是ssh隧道
既然ssh可以加密数据,我们可以让所有的不加密的网络数据都走ssh加密
#将本地所有8080端口的数据都通过ssh传输到远程主机
ssh -D 8080 user@host
本地端口转发
场景描述:
host1,host2之间不能联通,但是可以和host3之间联通,所以可以通过host3做一个中间的代理机器
#将本地2121端口的数据,全部通过host3发送到host2的21端口上
ssh -L 2121:host2:21 host3
#"本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道"。
来,看看跳板机是怎么工作的
ssh -L 9001:host2:22 host3
此时连接本地的9001端口就相当于连接到了远程host2上了
ssh localhost -p 9001
远程端口转发
场景描述: host1, host2为两台互不能联通的外网机器,host3为一台内网机器,可以主动链接host1和host2,但是外面连不进来,所以可以通过如下方式进行联通
#将host1上2121端口的所有数据都通过host3转发到host2的21端口上,奇迹啊
ssh -R 2121:host2:21 host1
rsync
大家都知道,对于一个php程序员来说,早日掌握熟练linux时非常重要的,这将给我们的工作带来非常大的便利。今天把rsync这个工具折腾了一番,非常好用.
rsync主要我这里介绍两种工作方式,一种是运行服务端,一种是借助ssh协议来实现文件传输
1.我们先来用ssh来实现文件传输吧,
将本地的/opt/software/hello.php上传到129这台服务器上,这个时候是借助ssh的,不需要rsyncd这个服务的
需要注意的是目标服务器是要有写权限
rsync -avz ssh /opt/software/hello.php baixs@172.16.173.129:/opt/software/
将远程目录复制到本季,这样是不是在传输文件的时候非常方便呢,是的,非常方便
rsync -ave ssh baixs@172.16.173.129:/opt/software/ /opt/software/
2.就是开启rsyncd这个服务
- touch /etc/rsyncd.conf
- 文件配置非常简单,我们配置最简洁的一个配置段
uid=root
gid=root
[mysoftware]
path=/opt/software
我们这里没有配置任何密码文件,我这里配置是为了保持简洁
3.启动我们的rsyncd服务端
rsync --daemon --config=/etc/rsyncd.conf 这样就启动了
现在我要吧mysoftware这个模块指定的目录传输到本地,可以这样
rsync -av baixs@172.16.173.129::mysortware /opt/software
执行这个命令就把129mysortware模块下的文件全部拉到本地了
知道这么多足够我们运维了
/etc/ssh/config文件能干吗
公钥加密私钥解密
ssh免密码登入另外一台机器,必须将公钥放到目标机器上才能相互通信
问题: ~/.ssh/authorized_keys 是干吗的
是免秘登入用的
问题:/etc/ssh/config文件能干吗
这个文件是为了方便管理多个远程主机的,例子如下
每次登入就可以像下面这样子简单粗暴
ssh aliyun
问题: ~/.ssh/knows_hosts能干吗
#密码登入
步骤1:
$ ssh user@host
The authenticity of host 'host (12.18.429.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?
步骤2:接受远程主机的公钥
Are you sure you want to continue connecting (yes/no)?
接受主机之后系统会有一个许可
Warning: Permanently added 'host,47.104.27.47' (RSA) to the list of known hosts.
之后就是输入密码了
Password: (enter password)
当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中
系统的保存在/etc/ssh/ssh_known_hosts中
ssh-add 命令
ssh-agent干吗的
大部分是自动用来输入密码的
生成私钥,流弊
ssh-keygen -t rsa
如果不想输入yes这样交互,下面是解决方案
如果是配置文件,可以这样配置
如果是命令行
ansible中直接这样配置即可