概述
SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。
ssh服务端由2部分组成: openssh(提供ssh服务) openssl(提供加密的程序)
ssh的客户端可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接
SSH的工作机制
服务器启动的时候自己产生一个密钥(768bit公钥),本地的ssh客户端发送连接请求到ssh服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥(768bits)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对key(1024bit),发回给服务器端,建立连接通过key-pair数据传输。
SSH的加密技术
加密技术:传输过程,数据加密。
1.SSH1没有对客户端的秘钥进行校验,很容易被植入恶意代码
2.SSH2增加了一个确认联机正确性的Diffe_Hellman机制,每次数据的传输,Server都会检查数据来源的正确性,避免黑客入侵。
SSH2支持RSA和DSA密钥
DSA:digital signature Algorithm 数字签名
RSA:既可以数字签名又可以加密
SSH知识小结
- SSH是安全的加密协议,用于远程连接Linux服务器
- SSH的默认端口是22,安全协议版本是SSH2
- SSH服务器端主要包含2个服务功能SSH连接和SFTP服务器
-
如何防止SSH登录入侵
密钥登录,更改端口
- 牤牛阵法
- 监听本地内网IP(ListenAddress 192.168.25.*)
SSH功能
登陆
登陆主机
ssh -p 22 root@gaox.net
查看已知主机
ssh-keygen -l -f ~/.ssh/known_hosts
cat /root/.ssh/known_hosts
ssh远程执行sudo命令
ssh -p 22 -t root@gaox.net sudo vim /etc/hosts
scp是加密远程拷贝,cp为本地拷贝。可以推送过去,也可以拉过来。每次都是全量拷贝(效率不高,适合第一次),增量拷贝用rsync。
scp -p 22 -r -p ./h.txt root@gaox.net:/home/admin/help.txt
SSH隧道端口端口转发
假设我们内部主机需要远程管理,如果主机没有公网ip我们在出差或者不在所在网络环境时,也可以通过ssh做些手脚。
有一台ECS主机具备以下条件:
有公网ip:11.10.10.10
,开放了22、10022、10023端口,用户名/密码:root@gaox1024
有一台内部主机具备以下条件:
可以访问互联网,能够使用ssh协议,用户名/密码:gaox@huahua21
以下:local.gaox.site其实时我定义的二级域名,指向为:127.0.0.1;gaox.net是指向到我的ECS主机。
1、内部主机连接
在内部主机上执行以下命令,用于和ECS主机接通并监听对方10022端口
ssh -NfR 10022:local.gaox.site:22 root@gaox.net -p22
并输入ECS主机密码
2、测试ECS主机登陆内部主机
ssh -p 10022 gaox@local.gaox.site
此时输入内部主机的密码,即可从ECS上访问我们的内部主机了。
小问题
提示:Warning: remote port forwarding failed for listen port 10022
解决办法,由于我们第一次可能配置得有些问题,登陆到ECS上杀掉监听10022端口的进程,重新执行步骤一即可。到这里基本都可以满足大部分人的需求了。
3. 让外部通过ECS做跳板访问内部
问题
服务器重装,密钥不能用
提示信息:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
ssh-keygen -R gaox.net
ssh 多账户登录工具
文件:~/login.sh
#!/usr/bin/expect
# Specify which script to execute, have to be in the first row
# Reads a variable from a command
set name [lindex $argv 0]
switch $name {
gaox {
set user root
set ip gaox.net
set port 22
set pass "gaoxAdminPassWord"
}
ning {
set user root
set ip gao.site
set port 22
set pass "ningAdminPassWord"
}
liu {
set user root
set ip gao.cn
set port 22
set pass "liuAdminPassWord"
}
default {
puts "无此服务器: $name"
exit
}
}
set timeout 30
# Spawn and expect are an expect internal command that can be executed after you enter the expect environment
spawn ssh -p $port $user@$ip
expect {
# determines whether the last output contains "this" string
# If so, return immediately, otherwise return after waiting for some time,
# in this case the waiting time is the "timeout" previously set
"(yes/no)?"
# send is a perform interactive actions,
{send "yes\n";exp_continue}
"password:"
{send "$pass\n"}
}
# when the execution is complete, the interaction state is maintained and control is given to the console
interact
alias sshlogin='~/login.sh'
最终效果