linux-ssh

14 篇文章 0 订阅
2 篇文章 0 订阅

https://www.jianshu.com/p/dd053c18e5ee

一、SRC、工作模型

ssh本身就是个工具,用来连接到指定的节点。免密就是自动输入密码,免密只跟用户名相关,跟ip、主机名、别名无关。
可以配置相同用户之间的免密,当然也可以配置不同用户之间的免密。
A节点用户a登录Bb,Aa在~/.ssh目录生成公钥和私钥,然后把公钥发送到Bb节点,然后Aa就可以免密登录Bb了。
==》a要免密登录b,就把a的公钥放在b上
公钥顾名思义,就是给别人的,

ssh免密、主机名、ip无关,因为ssh相当于自动输入指定用户的密码,只要用户名密码对,别的都不重要。
原先配好免密的,修改了主机名,也是可以免密的。
用户名不同:
如果我在node1上,使用用户ws登录,且我在node2和node3上均有用户ws,此时我登录只需使用:ssh node2即可登录node2主机,
如果我在node1上,使用用户ws登录,但是在node2和node3上并没有用户ws,但是有用户user1,此时使用ssh-copy-id node1将不会成功,此时应该使用ssh-copy-id usr1@node2。登录时使用ssh user1@node2

原理、模型

二、须知:

1. ssh连接是单向的, A能免密登录B, 并不能同时实现B能免密登录A

2. ssh跟ip、主机名无关,亲测,换了ip、主机名之后,原来能免密的仍能免密。ssh只关心账号密码或者公私钥,只要这2个对了,谁都能连。公私钥只跟linux系统用户有关,跟密码无关。

亲测,在配置git时,生成公钥不需要输入密码,只需要生成公钥,推测认证只跟用户有关

四、多节点免密的流程

1. 切换到需要免密的用户,在任意目录下,执行ssh-keygen

误区:

  • 不需要进入到家目录的.ssh目录,在任一目录下执行ssh-keygen,都会自动在家目录下创建.ssh目录,
  • 不需要通过ssh 自己来创建.ssh目录
  • 手动创建.ssh当然也可以,但要注意权限 chmod 700
    在这里插入图片描述
  • ssh-keygen是生成公私钥,此时.ssh目录下只有这2个文件,pub是公,id_rsa是私。authorized_keys和known_hosts是之后ssh-copy-id和用主机名ssh登录时自动创建的
    在这里插入图片描述

2. ssh-copy-id 对方用户@对方ip

会自动在对方用户家目录.ssh下创建authorized_keys目录,里面会记录别的节点发来的公钥,分为3段,第一段是加密类型,第二段是密文,第三段是用户@发送公钥时使用的名字,注意,这里虽然是主机名,但ip、别名也都是可以访问的,ip、别名、主机名配一个就行。
在这里插入图片描述

手动生成authorized_keys

authorized_keys必须是600或更小。
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

注意:

  • 自己也需要给自己配免密
  • 是单向的
  • 手动方式:
    cat ~/.ssh/id_rsa.pub | ssh dest主机 destUser@destIP 'cat >> ~/.ssh/authorized_keys'???
    先把自己的公钥文件scp到对方节点,然后在对方节点使用cat + >> 追加到~/.ssh/authorized_keys

ssh后执行多条命令

大家平时有没有遇到自己连接云服务器,ssh 连接上去之后,发现自己的一些小工具用不了

例如go build无法使用 ,由于我们安装配置golang 环境的时候,是在文件/etc/profile中写了配置,因此需要source 一下/etc/profile

那么是否可以在ssh 连接上服务器的时候就可以立即自动执行这一类命令呢?

我们的智慧无穷无尽,小工具也是非常的多,今天来讲述一下SSH连接服务器后执行多条命令可以如何做

  • 单条命令:ssh user@ip command1
  • 多条命令:
    ssh user@ip “command1;command2”
    ssh user@ip “cmd1 && cmd2”
    ssh user@ip “cmd1 || cmd2”
    ssh user@ip “cmd1 && cmd2” 和 ssh user@ip “cmd1;cmd2” 还有 ssh user@ip "cmd1 || cmd2"的区别:
    &&表示前面执行成功后执行后面的命令,||表示执行失败了执行后面的命令;“;”表示依次执行两条命令
  • 要对$符号进行转义:
    ssh user@ip “echo $PATH” 输出的是本机PATH值;
    ssh user@ip “echo $PATH” 输出的是远端ip的PATH值。

1 使用分号隔开

使用 分号 ;来隔开命令

附带1条命令

ssh User@Host 'source /etc/profile'

附带多条命令

ssh User@Host 'source /etc/profile ; uptime'

2 使用管道符号隔开

使用管道|来隔开命令

附带1条命令

ssh User@Host 'source /etc/profile'

附带多条命令

ssh User@Host 'source /etc/profile | uptime'

3 使用写EOF的方式

同样适用于一条 / 多条命令

ssh User@Host << EOF
> ls -al
> source /etc/profile
> EOF

4 使用脚本的方式

使用脚本的方式花样就更多了,例如有一个脚本myinit.sh在/home/admin/code/ 下面

myinit.sh

#!/bin/bash

source /etc/profile
ls -al

远程连接服务器

ssh User@Host ‘bash -s’ < /home/admin/code/myinit.sh
————————————————
版权声明:本文为CSDN博主「阿兵云原生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_37322399/article/details/126454798

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值