目录
SSH是一种安全协议,主要用于给远程登录会话数据进行加密,保证数据传输的安全。Linux下SSH服务端的进程名为sshd
,负责实时监听远程SSH客户端的远程连接请求,并进行处理。
Ubuntu安装:
sudo apt-get install openssh-server
启动和关闭ssh服务 :
sudo service ssh start/restart/stop
sudo /etc/init.d/ssh start/restart/stop
登录及退出远程主机命令:
# ssh登录远程主机
$ ssh [用户名@]ip地址或域名
# 退出登录远程主机
$ exit 或 ctrl-D
IP地址查看命令
查看本机IP地址命令如下:
# Linux中查看本机IP地址,以下命令二选一
$ ifconfig # 需安装额外的应用
$ ip addr
# Windows系统中用于显示当前电脑的TCP/IP网络配置值命令
$ ipconfig
# 测试网络的连接状态
$ ping IP地址或域名
# 长连接测试网络的连接状态
$ ping IP地址或域名 -t
# 查看和设置主机名
$ hostname
SSH密钥
为避免每次连接需输入密码,则采取利用密钥对进行连接,主要思路是:生成一对公钥私钥,私钥在local主机上,公钥在远程服务器上,每次建立ssh连接自动检查密钥对是否匹配。
目的:让两台服务器之间进行相互的免密登录
# 生成密钥对
$ ssh-keygen
# 执行以后会在主目录下生成一个.ssh文件夹,其中包含私钥文件id_rsa和公钥文件id_rsa.pub
# 拷贝公钥的内容到远程的服务器上
$ cat id_rsa.pub
# 将本地的公钥复制到远程机器的authorized_keys文件中,-i是显示错误信息
$ ssh-copy-id -i /root/.ssh/id_rsa.pub root@远程服务器ip地址
# 执行的过程中会进行提示输入远程服务器的密码,后续登录就不需要再输入密码
# 注意:密钥之前生成过,不需要再次生成,否则会覆盖之前的密钥,需要重新再执行一次命令:ssh-copy-id -i /root/.ssh/id_rsa.pub root@远程服务器ip
# 验证登录到远程服务器上,不用输入远程服务器的登录密码
root@dj:/# ssh 远程服务器ip地址
Last login: Fri Aug 6 15:03:32 2021 from xx.xx.xx.xx
# 退出登录远程主机
$ exit 或 ctrl-D
# 再次ssh登录远程主机
$ ssh [用户名@]ip地址或域名
密钥常见错误及解决办法
1.当本地端与远程任何一端的ssh信息失效时,会报错"ECDSA host key "ip地址" for has changed and you have requested strict checking"
解决办法:清除当前机器里关于远程服务器的缓存和公钥信息,及清除known_hosts里旧缓存文件
# 以下方法进行二选一
# 清除旧缓存
ssh-keygen -R '远程服务器ip地址'
# 清空known_hosts文件内容
ssh-keygen -f "/root/.ssh/known_hosts" -R 远程服务器ip地址
2.在Linux终端使用ssh root@server_ip来连接到远程服务器时,出现Permission denied (publickey)
原因:远程主机禁用ssh密码登录权限
解决办法:不是密码错误,并且服务器上的sshd服务已经开启,则需要修改目标服务器的配置文件/etc/ssh/sshd_config
# 登录目标服务器上,执行以下操作:
# 1.切换root用户
$ su root
# 注意,忘记root密码,可使用以下命令重置
# 给root用户设置密码
$ sudo passwd root
# 2.修改sshd服务配置文件,保存后退出(需root用户权限才可进行修改)
$ vim /etc/ssh/sshd_config
#### 以下为修改内容 ####
PermitRootLogin yes # 允许ssh远程登录
PasswordAuthentication yes # 允许ssh密码登录权限
# 3.重启sshd服务
$ service ssh restart
3.ubuntu下执行"sudo service ssh restart",报如下错误:“sshd: no hostkeys available -- exiting.”
解决办法:
# 执行以下错误
$ ssh-keygen -A
$ /etc/init.d/ssh start
SCP服务
scp是基于ssh的拷贝服务,拷贝有如下指令:
# 从本地服务器复制到远程服务器:
(1) 复制文件:
命令格式:
$ scp local_file remote_username@remote_ip:remote_folder # 复制文件夹
或者
$ scp local_file remote_username@remote_ip:remote_file # 复制文件
或者
$ scp local_file remote_ip:remote_folder
或者
$ scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名
(2) 复制目录:
命令格式:
$ scp -r local_folder remote_username@remote_ip:remote_folder
或者
$ scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要输入用户密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
# 从远程复制到本地
从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可
$ scp -r remote_username@remote_ip:remote_folder local_folder
$ scp remote_ip:remote_file local_file