SSH免密登录服务器及SSH内网穿透

SSH真是个强大的工具,可以做到好多东西,最近学习了一点皮毛,总结下:

1.SSH目录
├── authorized_keys        --服务器的已授权秘钥信息
├── config							--本地配置
├── id_rsa							--私钥
├── id_rsa.pub					--公钥
└── known_hosts				--已知认证的主机足迹

如果本机没有ssh目录的话,可以自己生成下:

ssh-keygen -t rsa -C "zhan@zhitao.com"

然后三个回车就可以了。

2.通过终端查看 SSH 远程登录是否已经开启

想要查看 Mac 上 SSH 的当前状态?使用简单的终端就可以检查 SSH 和远程登录目前是否已经开启:

sudo systemsetup -getremotelogin

如果已经开启的话,指令会显示 “Remote Login: On” ,反之就会显示“Remote Login: Off”。

通过终端指令开启Mac的SSH

要快速开启 SSH 服务器并允许 SSH 连接进入当前 Mac,使用下列指令:

 sudo systemsetup -setremotelogin on 

输入指令后并没有任何确认信息表明远程登录和 SSH 已经开启,但你可以使用上文提到的方法来检查是否开启成功。

通过终端指令关闭Mac的SSH

如果你想通过终端指令禁用 SSH 服务器并阻止远程连接,输入下列指令:

 sudo systemsetup -setremotelogin off 

3.配置本地ssh免密登录服务器

使用ssh 可以做到在本地免密登录服务器,很方便,可以参考这篇文章

这个命令要熟悉,拷贝本地的公钥到服务器

ssh-copy-id  user@ip_address

另外本地也可以用别名代替用户和ip地址,具体的配置可以在 ~/.ssh/config中去配置,我这里配置了hw 和 ali 的。
因此在我本地使用 就可以登录了

ssh hw
或者
ssh ali  

在这里插入图片描述
具体配置:

Host hw
    hostname 你的ip
    user 用户名
    port 22
    IdentityFile ~/.ssh/id_rsa
4.SSH实现外网访问内网

这种方式的原理就是通过当前unix/linux客户端向服务器主动的建立一个SSL隧道,然后将服务器上的某个端口(这里我定义为8888)转发到当前客户端的22端口上,这样任何一台计算机包括服务器本身,都能使用服务器上开启的某个端口连接到当前的客户端上,我理解到的就是进行了端口转发,然后间接通过服务器来访问内网的机器。

1. 在本地机器输入以下命令 (建立隧道)

ssh -p 22 -NR 8888:127.0.0.1:22 root@ip

在ssh文档中 -NR 的定义:

  • -N
    不执行远程命令. 用于转发端口. (仅限协议第二版)
  • -R port:host:hostport
    将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
  • -g
    允许远端主机连接本地转发的端口.
  • -f
    要求 在执行命令前退至后台. 它用于当 准备询问口令或密语, 但是用户希望它在后台进行. 该选项隐含了 -n 选项. 在远端机器上启动 X11 程序的推荐手法就是类似于 ssh -f host xterm 的命令.
  • -q
    安静模式. 消除所有的警告和诊断信息
  • -n:
    把 stdin 重定向到 /dev/null (实际上防止从 stdin 读取数据). 在后台运行时一定会用到这个选项. 它的常用技巧是远程运行 X11 程序. 例如, ssh -n shadows.cs.hut.fi emacs 将会在 shadows.cs.hut.fi 上启动 emacs, 同时自动在加密通道中转发 X11 连接. 在后台运行. (但是如果 要求口令或密语, 这种方式就无法工作; 参见 -f 选项.)

2. 然后可以登录自己的服务器,在自己的服务器上就可以通过以下命令:

ssh  用户名@127.0.0.1 -8888

这里的用户名是你本地机器的用户名。

3. 如果是其他机器的话,就可以通过

ssh  用户名@ip -8888

这里的用户名是服务器上的用户名,ip是服务器的ip。

通过以上三个步骤就可以实现外网访问公司内网拉,不过要内网的机器一直开着,转发着端口。另外本地机器的ssh如果在一定时间内会停掉自动转发的请求,这个时候我们就需要安装autossh,来监控ssh转发请求,一直保持着这个请求。

5.SCP传输文件

在Linunx下使用SCP传输文件,也写在这里吧,反正工作或者以后学习会经常用到,把自己的文件传到服务器或者从服务器中拉文件下来。
先制定下规则:

fileLocal:本地文件位置
fileRemote:服务器文件位置
remoteIp:服务器ip
  • 上传到远端服务器
scp fileLocal root@remoteIp:fileRemote
  • 从服务器上复制文件到本地
scp root@remoteIp:fileRemote fileLocal

另外如果设定了别名的话,就是跟ssh那里一样,可以使用别名代替root@remoteIp

上面都是针对单个文件的,如果需要传输整个文件夹的话,需要用scp -r

另外使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限,如果没有权限,需要chmod 777 一下。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值