内容简介:SSH是一种网络协议,用于计算机之间的加密登录。原理:当远程主机的公钥被接受以后,它就会被保存在本地文件基本命令:
-
本地登录服务器
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免密登录服务器和scp的使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- iTerm2结合 expect 脚本实现 ssh 登录跳板机后登录指定服务器
- 从零开始搭建服务器之登录和登出远程服务器
- macOS使用SSH Key登录Linux服务器
- 部分网友Apple ID无法登录,疑似苹果服务器出现故障
- Mac使用ssh-key免密码登录服务器
- macOS破坏SSH默认规则,程序员无法登录Web服务器,苹果新系统遭吐槽
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解Android内核设计思想(第2版 套装上下册)
林学森 / 人民邮电出版社 / 2017-7-1 / 158
全书从操作系统的基础知识入手,全面剖析进程/线程、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统、虚拟机等核心技术在Android中的实现原理。书中讲述的知识点大部分来源于工程项目研发,因而具有较强的实用性,希望可以让读者“知其然,更知其所以然”。本书分为编译篇、系统原理篇、应用原理篇、系统工具篇,共4篇25章,基本涵盖了参与Android开发所需具备的知识,并通过大量图片与实例......一起来看看 《深入理解Android内核设计思想(第2版 套装上下册)》 这本书的介绍吧!