当前位置:首页 » 编程软件 » 公钥机脚本

公钥机脚本

发布时间: 2022-05-02 22:26:31

① 在脚本中使用ssh时的几个注意事项

1. 超时设置
-o ConnectTimeout=3
2. 重定项标准输入到/dev/null
-n
当使用这样的形式时 (使用 key 认证):
while read line ; do ip=$(awk '{print $1}' < << $line ) ssh -n -o ConnectTimeout=3 $i uptime done < file
假如此时不使用 -n ,则只有第一行会被处理。
3. 批处理模式,在脚本中使用再合适不过(使用 key 认证)
-o BatchMode=yes
当 key 认证不成功时,有可能会弹出“密码认识”,从而影响脚本运行下去,此时可以打开 BatchMode模式。
4. 遇到未知主机:
-o StrictHostKeyChecking=no
当遇到未知的主机公钥时,自动接受key。
5. 糟遇远程主机连接后无响应:
当设置了 BatchMode 时 ServerAliveInterval 默认被设置成 300 秒(服务端无数据传回的持续时间)。
ServerAliveCountMax相当于是重试的次数,比如下面的例子,15秒 x 3 = 45 秒,即当 45 秒后,真正超时断开。
TCPKeepAlive打开时,便于发现网络的断开。当网络故障(比如路由器坏掉)或者远端开机、死机时,连接会主动断开,否则的话,将会等待相当一段时间后才会断开。
-o ServerAliveInterval=15
-o ServerAliveCountMax=3
-o TCPKeepAlive=yes
需要注意的是,这里的超时、无响应,仅是 ssh或者sshd无影响,假如是在远程上执行程序,程序无响应,则不能处理此时的超时,解决方法见《在Shell中实现异步》。

② 如何生成公钥id

1. 生成公钥

首先检查本机公钥:

$ cd ~/.ssh
如果提示:No such file or directory 说明你是第一次使用git。如果不是第一次使用,请执行下面的操作,清理原有ssh密钥。

$ mkdir key_backup$ cp id_rsa* key_backup$ rm id_rsa*
生成新的密钥:

$ ssh-keygen -t rsa -C “您的邮箱地址”
在回车中会提示你输入一个密码,这个密码会在你提交项目时使用,如果为空的话提交项目时则不用输入。

您可以在你本机系统盘下,您的用户文件夹里发现一个.ssh文件,其中的id_rsa.pub文件里储存的即为刚刚生成的ssh密钥。

2. 添加公钥

登录CODE平台,进入用户“账户设置”,点击右侧栏的“ssh公钥管理”,点击“添加公钥”,将刚刚生成的公钥填写到“公钥”栏,并为它起一个名称,保存即可。

注意:复制公钥时不要复制多余的空格,否则可能添加不成功。

我碰到的一个项目:有些时候,需要在你生成的.ssh目录下,新建个config文件,然后里面写入user xxx

3. 管理公钥

您也可以在“账户设置”——“ssh公钥管理”删除或者修改公钥。

linux中使用shell脚本访问sftp服务器,密钥不会用

密钥用于建立SSH互信环境,本地公钥需要分发到远端服务器目录,可实现本地主机到远端SFTP服务器的无访问.
1. 生成密钥对,取得本地公钥,如:id_dsa.pub
2. 登录到远端SFTP服务器用户HOME目录的.ssh文件夹
3. 将id_dsa.pub的内容追加到远端服务器.ssh/autorized_keys文件尾部并保存
4. 尝试与本地主机用户SFTP到远程服务器: sftp user@server_addr

④ linux系统,多台机器ssh免密码登录同一台机器执行某个脚本,不需要expect

A B C三台机器上以当前用户运行如下命令生成本主机的公钥和私钥文件:

ssh-keygen-trsa

上述命令执行后,目录~/.ssh下会出现两个文件:id_rsa和id_rsa.pub。其中,id_rsa.pub为公钥文件。将该文件的内容追加到主机D上~/.ssh目录下的authorized_keys文件中。例如:

A机将id_rsa.pub文件传到D机:

scp~/.ssh/id_rsa.pubuser@HOSTD:/tmp/id_rsa_HOSTA.pub

D机user用户追加authorized_keys文件:

cat/tmp/id_rsa_HOSTA.pub>>~/.ssh/authorized_keys

接下来,就可以在不输入密码的情况下在远程主机私执行命令了。命令格式如下:

ssh 远程用户名@远程主机名或IP地址 '远程命令或者脚本'

例如:

sshuser@HOSTD'hostname'
sshuser@HOSTD'/home/user/script/test.sh'

需要特别注意的是:当远程脚本中使用了一些命令识别依赖于环境变量时,该脚本需要在其第一行中包含执行profile文件的命令。比如,在Bash中,该脚本的第一行为:

source~/.bash_profile

否则,远程脚本可能报错。

⑤ 如何生成ssh公钥

1. 生成公钥
首先检查本机公钥:
$ cd ~/.ssh
如果提示:No such file or directory 说明你是第一次使用git。如果不是第一次使用,请执行下面的操作,清理原有ssh密钥。
$ mkdir key_backup$ cp id_rsa* key_backup$ rm id_rsa*
生成新的密钥:
$ ssh-keygen -t rsa -C “您的邮箱地址”
在回车中会提示你输入一个密码,这个密码会在你提交项目时使用,如果为空的话提交项目时则不用输入。
您可以在你本机系统盘下,您的用户文件夹里发现一个.ssh文件,其中的id_rsa.pub文件里储存的即为刚刚生成的ssh密钥。
2. 添加公钥
登录CODE平台,进入用户“账户设置”,点击右侧栏的“ssh公钥管理”,点击“添加公钥”,将刚刚生成的公钥填写到“公钥”栏,并为它起一个名称,保存即可。
注意:复制公钥时不要复制多余的空格,否则可能添加不成功。
我碰到的一个项目:有些时候,需要在你生成的.ssh目录下,新建个config文件,然后里面写入user xxx

3. 管理公钥
您也可以在“账户设置”——“ssh公钥管理”删除或者修改公钥。

⑥ 怎样实现对私钥(公钥)进行解密

要实现安全登录,可以采用下面三种方法,一种基于非对称加密算法,一种基于对称加密算法,最后一种基于散列算法。下面我们来分别讨论这三种方法。
非对称加密算法中,目前最常用的是 RSA 算法和 ECC(椭圆曲线加密)算法。要采用非对称加密算法实现安全登录的话,首先需要在客户端向服务器端请求登录页面时,服务器生成公钥和私钥,然后将公钥随登录页面一起传递给客户端浏览器,当用户输入完用户名密码点击登录时,登录页面中的 JavaScript 调用非对称加密算法对用户名和密码用用公钥进行加密。然后再提交到服务器端,服务器端利用私钥进行解密,再跟数据库中的用户名密码进行比较,如果一致,则登录成功,否则登录失败。
看上去很简单,但是这里有这样几个问题。目前 RSA 算法中,1024-2048 位的密钥被认为是安全的。如果密钥长度小于这个长度,则认为可以被破解。但这样的长度超过了程序设计语言本身所允许的数字运算范围,需要通过模拟来实现大数运算。而在 Web 系统的客户端,如果通过 JavaScript 来模拟大数运行的话,效率将会是很低的,因此要在客户端采用这样的密钥来加密数据的话,许多浏览器会发出执行时间过长,停止运行的警告。然而,解密或者密钥生成的时间相对于加密来说要更长。虽然解密和密钥生成是在服务器端执行的,但是如果服务器端是 PHP、ASP 这样的脚本语言的话,它们也将很难胜任这样的工作。ECC 算法的密钥长度要求比 RSA 算法要低一些,ECC 算法中 160 位的密钥长度被认为与 RSA 算法中 1024 位的密钥长度的安全性是等价的。虽然仍然要涉及的模拟大数运算,但 ECC 算法的密钥长度的运算量还算是可以接受的,但是 ECC 算法比 RSA 算法要复杂的多,因此实现起来也很困难。
对称加密算法比非对称加密算法要快得多,但是对称加密算法需要数据发送方和接受方共用一个密钥,密钥是不能通过不安全的网络直接传递的,否则密钥和加密以后的数据如果同时监听到的话,入侵者就可以直接利用监听到的密钥来对加密后的信息进行解密了。
那是不是就不能通过对称加密算法实现安全登录呢?其实只要通过密钥交换算法就可以实现安全登录了,常用的密钥交换算法是 Diffie-Hellman 密钥交换算法。我们可以这样来实现密钥的安全传递,首先在客户端向服务器端请求登录页面时,服务器端生成一个大素数 p,它的本原根 g,另外生成一个随机数 Xa,然后计算出 Ya = gXa mod p,将 p、g、Ya 连同登录页面一起发送给客户端,然后客户端也生成一个随机数 Xb,计算 Yb = gXb mod p,然后再计算 K = YaXb mod p,现在 K 就是密钥,接下来就可以用 K 作密钥,用对称加密算法对用户输入进行加密了,然后将加密后的信息连同计算出来的 Yb 一同发送给服务器端,服务器端计算 K = YbXa mod p,这样就可以得到跟客户端相同的密钥 K 了,最后用客户端加密算法的相应解密算法,就可以在服务器端将加密信息进行解密了,信息解密以后进行比较,一致则登录成功,否则登录失败。需要注意的时候,这里服务器端生成的随机数 Xa 和 客户端生成的随机数 Xb 都不传递给对方。传递的数据只有 p、g、Ya、Yb 和加密后的数据。
但是如果我们不采用加密算法而采用散列算法对登录密码进行处理的话,可以避免被直接解密出原文,但是如果直接采用 MD5 或者 SHA1 来对登录密码进行处理后提交的话,一旦入侵者监听到散列后的密码,则不需要解密出原文,直接将监听到的数据提交给服务器,就可以实现入侵的目的了。而且,目前 MD5 算法已被破解,SHA1 算法则被证明从理论上可破解,就算采用离线碰撞,也可以找出与原密码等价的密码来。所以直接采用 MD5 或者 SHA1 来对密码进行散列处理也是不可行的。
但是如果在散列算法中加入了密钥,情况就不一样了。hmac 算法正好作了这样的事情,下面我们来看看如何用 hmac 算法实现安全登录。首先在客户端向服务器端请求登录页面时,服务器端生成一个随机字符串,连同登录页面一同发送给客户端浏览器,当用户输入完用户名密码后,将密码采用 MD5 或者 SHA1 来生成散列值作为密钥,服务器端发送来的随机字符串作为消息数据,进行 hmac 运算。然后将结果提交给服务器。之所以要对用户输入的密码进行散列后再作为密钥,而不是直接作为密钥,是为了保证密钥足够长,而又不会太长。服务器端接受到客户端提交的数据后,将保存在服务器端的随机字符串和用户密码进行相同的运算,然后进行比较,如果结果一致,则认为登录成功,否则登录失败。当然如果不用 hmac 算法,直接将密码和服务器端生成的随机数合并以后再做 MD5 或者 SHA1,应该也是可以的。
这里客户端每次请求时服务器端发送的随机字符串都是不同的,因此即使入侵者监听到了这个随机字符串和加密后的提交的数据,它也无法再次提交相同的数据通过验证。而且通过监听到的数据也无法计算出密钥,所以也就无法伪造登录信息了。
对称和非对称加密算法不仅适用于登录验证,还适合用于最初的密码设置和以后密码修改的过程中,而散列算法仅适用于登录验证。但是散列算法要比对称和非对称加密算法效率高。

⑦ 如何在脚本里面自动输入密码

shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量、条件、算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力得多。
但是有时候我们可能会需要实现和交互程序如ftp,telnet服务器等进行交互的功能,这时候我们需要用到shell的自动交互功能.
最简单的例子就是创建用户,我创建100个用户,初始密码为123,那么要是挨着passwd username ,交互性输入密码,那不得疯掉,但是脚本里应该怎么写呢?将密码123,输入到passwd命令?
本文收集了较常用交互方法,并进行了比较和总结。
自动交互方法一:利用命令的自带参数,将标准输入作为手动输入的内容
自动交互最关键的就是交互信息的自动输入,首先联想到文件重定向,在shell编程中有这样一种用法(参考Linux与UNIX SHELL编程指南 chapt 5.7):"command <<delimiter p="" 从标准输入中读入,直至遇到delimiter分界符。?
重定向操作符command <<delimiter是一种非常有用的命令,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, p="" shell就知道输入结束了。最常见的delimiter分界符是eof,当然完全可以自定为其他字符。
对于需求1 要求的自动登陆ftp,并作系列操作,则可以用这种方法进行自动交互。代码如下:
[yjwan@test ~]$ ftp -i -n 192.168.21.46 <
user dbftp dbftp101
ls
EOF
下面是得到的结果:
Connected to 192.168.21.46.
220 developerjail FTP server (Version 6.00LS) ready.
331 Password required for dbftp.
230 User dbftp logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
229 Entering Extended Passive Mode (|||54281|)
150 Opening ASCII mode data connection for '/bin/ls'.
total 8847424
-rw-r--r-- 1 dbftp www 9055318991 Aug 28 14:28 ewiz90.sql_2010-08-29
226 Transfer complete.
221 Goodbye.
测试可以发现,如上代码使用帐号名dbftp,密码dbftp101成功登陆了ftp服务器,并进入目录,ls出当前目录的文件。
注意事项:
1 这里一定要加-i ,否则必定失败!!
这里ftp用的-I 参数 结束了交互式输入,因此可以用文本的方式自动地输入用户密码以及操作方式
如果不用-I 参数,那么必定要求你手动输入密码的!!那么就达不到自动登陆的要求了
你可以man ftp找到这个参数
-i 关闭多文件传送中的交互式提示。请参考 prompt、mget、mput 和 mdelete 子命令,以取得多文件传送中的提示的描述。
-n 防止在起始连接中的自动登录。否则, ftp 命令会搜索 $HOME/.netrc 登录项,该登录项描述了远程主机的登录和初始化过程。请参考 user 子命令。
2 举一反三:只要是要求输入密码的命令,一般都带有一个参数,允许你从标准输入,输入用户密码,以及操作。
其他常用的自动登陆命令的参数
1) Passwd命令
Linux下 Passwd有参数
--stdin
This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.
所以linux下自动改变用户密码的办法就是
Echo 密码 |passwd –stdin 用户名
Freebsd没有以上参数 注意
他的方法是echo passwd |pw mod user username -h 0
2)smbpasswd
-s
This option causes smbpasswd to be silent (i.e. not issue prompts)
and to read its old and new passwords from standard input, rather
than from /dev/tty (like the passwd(1) program does). This option
is to aid people writing scripts to drive smbpasswd
3)sudo
在shell脚本中需要用root用的来执行指令:
sudo 自动输入密码
echo "password" | sudo -S netstat -tlnp
-S
The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device.
3 标准输入还可以用以下两种写法:
可以将下面的内容写入到一个文本
然后ftp -I –n ip <文本
或者echo “..” |ftp –I –n ip
都是可以的!
因为他们都满足“有一个标准的输入”这个条件
4 ssh的自动登陆没有这样的自动输入密码的参数
一般都是使用公钥/私钥的方式自动登录
这种文章满街都是,网上google一下ssh自动登陆就可以找到答案。
或者用下面的办法。
自动交互方法2:利用expect脚本自动登陆
这个 expect基本属于一种编程了
基本任何需要交互式登陆的场合,他都可以解决,是相当的牛逼。
只要是第一种办法解决不了的,基本都可以用这种办法。

⑧ Linux系统如何利用shell交互实现关机操作

你指的是使用其它机器对某太机器实现远程关机等操作吗?开机我是不知道远程怎么做!
你可以这样做:
ssh 192.168.1.100
输入密码
reboot / halt /
那么可以编写一个shell。可是你必须做密码等价性才可以ssh不用密码。
ssh等价:
ssh-keygen -t dsa
所有回车。
会在/root/.ssh下生成两个文件,也就是公钥和私钥,你必须把公钥复制到对方机器去。公钥是有.pub结尾的。scp ******.pub 192.168.1.100:/root/.ssh/1.txt。
ssh 192.168.1.100
cat /root/.ssh/1.txt >> authorized_keys

ok搞定密码等价。现在编写脚本。
把ip添加道/root/tmp/ip.txt------------随意放在哪里。没有固定

本机下脚本:
vim powf
#!/bin/sh
I=$( cat /root/tmp/ip.txt )
ssh "$I" <<EOF
read -p "please input option (r/h) " v_o
guanji $v_o

EOF
它机下脚本:
cd /usr/local/sbin
vim guanji
case $1 in
r) reboot ;;
h) halt ;;
*)
echo 'o no'

exit
esac

因为是放在通路上所以可以不写绝对路径。 你试试这个脚本,为临时写的,没有测试过。呵呵

⑨ 如何远程通过Xshell实现对linux主机的开、关机及重启

关机的情况无法远程开机,关机命令shutdown,重启命令reboot,使用步骤如下:

1、连接上相应的linux主机,进入到等待输入shell指令的linux命令行状态下。

热点内容
php开发的网页 发布:2025-05-14 16:22:03 浏览:477
服务器内存跑满了怎么回事 发布:2025-05-14 16:21:16 浏览:223
微信qq音乐缓存 发布:2025-05-14 16:16:16 浏览:468
c语言回收内存 发布:2025-05-14 16:16:08 浏览:143
2021国产安卓顶级旗舰买哪个 发布:2025-05-14 16:15:36 浏览:300
linux自学视频 发布:2025-05-14 16:14:49 浏览:255
我的世界服务器崩了重启 发布:2025-05-14 16:09:37 浏览:44
android深拷贝 发布:2025-05-14 16:09:35 浏览:153
cf电脑版转服务器神器还在吗 发布:2025-05-14 16:09:02 浏览:211
百度文库服务器如何搭建 发布:2025-05-14 16:09:00 浏览:248