ssh免密登录服务器和scp的使用

简介: ssh免密登录服务器和scp的使用

ssh免密登录服务器和scp的使用


TL;DR

本地登录服务器 ssh user@remote -p port,端口是22的话ssh user@remote,退出登录exit

本地免密码登录 ssh-copy-id user@remote -p port,这在写脚本服务器控制时特别有用

给服务器配置别名 code ~/.ssh/config追加一些内容,就可以ssh selfname登录,不再需要记服务器ip地址了

执行命令ssh selfname "cd ~;ls",将会在服务器上执行引号里的命令,执行之后其自动关闭远程服务

将a电脑文件(夹)复制到b电脑上哪个文件夹下面:scp username@a电脑ip:文件路径 username@b电脑ip:文件夹路径,是文件夹的话加上-r,这里也可以用别名,通常本机的话省略username@a电脑ip:

大段引用ssh的基本加高级用法

基础

SSH是一种网络协议,用于计算机之间的加密登录。原理:

远程主机收到用户的登录请求,把自己的公钥发给用户。

用户使用这个公钥,将登录密码加密后,发送回来。

远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

当远程主机的公钥被接受以后,它就会被保存在本地文件~/.ssh/known_hosts之中,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

基本命令:

ssh user@remote -p port
# user 是你在远程机器上的用户名,如果不指定的话默认为当前用户
# remote 是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名
# port 是 SSH Server 监听的端口,如果不指定的话就为默认值 22
# 比如我常用的 ssh zhm@120.79.52.223

通常在本地电脑输入以上命令之后,远程服务器就会询问密码,你输入的时候是看不见任何波动,输入完回车就可以了~,如果报错ssh: connect to host remote port 22: Connection refused,说明服务器没有按照ssh server,Ubantu Desktop系统默认是没有这个的,安装命令sudo apt-get install openssh-server

免密码登录

每次 ssh 都要输入密码是不是很烦呢?与密码验证相对的,是公钥验证。也就是说,要实现免密码登入,首先要设置 SSH 钥匙。也就是本地电脑生成公钥私钥,然后把公钥放在远程服务器上就可以了! 原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

# 查看本地有没有
ls ~/.ssh
# 没有就生成
ssh-keygen
# 在~/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
# 把公钥放到远程服务器
ssh-copy-id user@remote -p port
# 比如我的 ssh-copy-id zhm@120.79.52.223

ssh-copy-id基本都安装了,万一没有,mac上brew install ssh-copy-id。 windows麻烦点ssh user@remote -p port 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub,意思是在远端执行新建 .ssh 文件夹,并把本地的 ~/.ssh/id_rsa.pub (也就是公钥)追加到远端的 .ssh/authorized_keys 中。当然,不使用这条命令的话,你也可以手动操作这个过程,即先复制公钥,再登入远程机器,粘贴到 .ssh/authorized_keys 当中。

配置别名

每次都输入 ssh user@remote -p port,时间久了也会觉得很麻烦,特别是当 user, remote 和 port 都得输入,而且还不好记忆的时候。配置别名可以让我们进一步偷懒。比如我想用ssh lab替换上面一串

# cat>>某文件<<EOF追加下内容, >> 追加的意思 <<EOF 遇到EOF终止
# 因为是前端,直接用vscode编辑
code ~/.ssh/config
# 追加以下内容,保存
Host lab
    HostName remote
    User user
    Port port
# 来登录吧
ssh lab
# 比如我的
# Host han
    # HostName 120.79.52.223
    # User zhm
    # Port 22
# ssh han

命令行执行登录并且在目标服务器上执行命令

命令行执行登录并且在目标服务器上执行命令:

# 单引号或者双引号,将命令包起来,然后分号隔开命令
ssh user@remoteNode "cd /home ; ls"

如果是很多命令的话,需要建一个脚本。

# 建一个脚本文件test.sh,里面写上这个,然后执行 sh test.sh
#!/bin/bash  
# 远程执行的内容在"< < remotessh " 至" remotessh "之间,如果不想本机出现日志的话 ssh user@remoteNode >/dev/null 2>&1   << remotessh
ssh user@remoteNode << remotessh
ls
exit
remotessh

啊,写脚本就容易了,有木有!

传输文件

两台机器间文件传输可以用scp,它的地址格式与 ssh 基本相同,都是可以省略用户名和端口,稍微的差别在与指定端口时用的是大写的 -P 而不是小写的。不过,如果你已经配置了别名,那么这都不重要,因为 scp 也支持直接用别名

# 总的:本机的可以省略电脑的ip,默认的远程当前文件夹是 Home目录(~),将A电脑上的文件复制到B电脑上
# 注意的地方:A若是文件,B电脑若也是文件的路径,不管文件存不存在,都会将A文件内容写入到B这个文件。
#                    B电脑若是文件夹,不管文件夹存不存在,都会在这个文件夹下生成A电脑同名的文件和内容,有的话则会覆盖同名文件
# A若是文件夹,加上-r,B电脑若是文件的路径会报错,B电脑若是文件夹路径,文件夹不存在的话则会建立这个文件夹且放入A文件夹里面的内容(相当于将A文件夹挪过去然后重命名),文件夹存在的话,会在这个文件夹下面生成一个和A同名的文件夹,里面内容一致
scp A电脑:文件路径 B电脑:文件路径
# 把本地的 /path/to/local/file 文件传输到远程的 /path/to/remote/file  
scp -P port /path/to/local/file user@remote:/path/to/remote/file
# 也可以使用别名
scp /path/to/local/file lab:/path/to/remote/file
# 把远程的 /path/to/remote/file 下载到本地的 /path/to/local/file
scp lab:/path/to/remote/file /path/to/local/file
# 远程的默认路径是家目录
# 下面命令把当前目录下的 file 传到远程的 ~/dir/file
scp file lab:dir/file
# 加上 -r 命令可以传送文件夹
# 下面命令可以把当前目录下的 dir 文件夹传到远程的家目录下
scp -r dir lab:
# 别忘了 . 可以用来指代当前目录
# 下面命令可以把远程的 ~/dir 目录下载到当前目录里面
scp -r lab:dir/ .

如果觉得使用命令行传输文件浑身不自在,你还可以使用 SFTP 协议。任何支持 SFTP 协议的客户端都能用你的 SSH 账号信息登入并管理文件,比如开源的有图形化界面的FTP客户端 FileZilla。别忘了,在这些客户端里面,你也可以指定你的私钥(~/.ssh/id_rsa),然后就能做到无密码登入了。

保持程序在后台运行

以下命令均在服务器执行

nohup

# 让程序在后台运行 比如 nohup node index.js &
nohup 一直执行的命令 &
# 看下任务号 node的那个
ps
# 如果需要终止的话
kill 21455

tmux

tmux更能执行复杂的程序,tmux还能管理多个窗口,窗口切分,复制粘贴等等mac用户使用tmux更方便,新建会话tmux -CC,恢复的时候tmux -CC attach

# 服务器上安装tmux
sudo apt-get install tmux
# 运行tmux,进入会话,此时运行任何东西都不会因为退出ssh而被杀死
tmux
# 暂时离开会话 ctrl+b 再按下d
# 恢复会话
# tmux attach
# tmux命令必须运行在服务器上

阮一峰大神的ssh介绍

ssh的基本加高级用法

linux中的shell用ssh自动登录远程服务器后执行命令并自动

ssh转发

目录
相关文章
|
安全 Linux Shell
使用SCP命令在CentOS 7上向目标服务器传输文件
以上步骤是在CentOS 7系统上使用SCP命令进行文件传输的基础,操作简洁,易于理解。务必在执行命令前确认好各项参数,尤其是目录路径和文件名,以避免不必要的传输错误。
1101 17
|
应用服务中间件 网络安全 数据安全/隐私保护
网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
629 14
|
Ubuntu Linux 网络安全
在Linux云服务器上限制特定IP进行SSH远程连接的设置
温馨提示,修改iptables规则时要格外小心,否则可能导致无法远程访问你的服务器。最好在掌握足够技术知识和理解清楚操作含义之后再进行。另外,在已经配置了防火墙的情况下,例如ufw(Ubuntu Firewall)或firewalld,需要按照相应的防火墙的规则来设置。
745 24
|
Ubuntu 应用服务中间件 网络安全
关于一些轻量云服务器SSH断连的疑问
在使用2H2G配置的轻量级Ubuntu 22.04服务器时,按照Solana官网教程安装环境,执行`[cargo install]`命令(特别是安装avm和anchor包时),出现SSH连接中断且无法重新登录的问题。推测可能是低配服务器资源耗尽导致SSH进程被终止,即便CPU使用率下降也无法恢复连接,需重启服务器并等待约30分钟才能恢复正常。此现象或与服务器性能限制有关,期待更多测试与解释。
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
4089 5
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
大数据 网络安全 数据安全/隐私保护
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(二)
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(二)
811 5
|
XML 大数据 网络安全
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(一)
大数据-03-Hadoop集群 免密登录 超详细 3节点云 分发脚本 踩坑笔记 SSH免密 集群搭建(一)
408 5
|
网络安全 虚拟化 Docker
SSH后判断当前服务器是云主机、物理机、虚拟机、docker环境
结合上述方法,您可以对当前环境进行较为准确的判断。重要的是理解每种环境的特征,并通过系统的响应进行综合分析。如果在Docker容器内,通常会有明显的环境标志和受限的资源视图;而在云主机或虚拟机上,虽然它们也可能是虚拟化的,但通常提供更接近物理机的体验,且可通过硬件标识来识别虚拟化平台。物理机则直接反映硬件真实信息,较少有虚拟化痕迹。通过这些线索,您应该能够定位到您所处的环境类型。
1282 2
|
弹性计算 网络协议 关系型数据库
阿里云国际版ECS云服务器无法登录宝塔面板控制台
阿里云国际版ECS云服务器无法登录宝塔面板控制台

热门文章

最新文章