Linux 在Bash脚本中嵌入密码

Linux 在Bash脚本中嵌入密码,linux,bash,shell,scp,Linux,Bash,Shell,Scp,我正在运行一个测试脚本,其中需要将文件复制到目标嵌入式系统。但是,当从脚本运行此将文件复制到远程目标系统的命令时,系统会提示我输入目标板的管理员密码。如何使脚本自动执行,从而使脚本能够自行选择密码(从脚本中)并且我不必在每次运行脚本时手动输入密码 脚本的代码段形式如下所示: scp test.file1 <Target ip-address>:/home/bot21/test/. Password is prompted when the above command is run.

我正在运行一个测试脚本,其中需要将文件复制到目标嵌入式系统。但是,当从脚本运行此将文件复制到远程目标系统的命令时,系统会提示我输入目标板的管理员密码。如何使脚本自动执行,从而使脚本能够自行选择密码(从脚本中)并且我不必在每次运行脚本时手动输入密码

脚本的代码段形式如下所示:

scp test.file1 <Target ip-address>:/home/bot21/test/.

Password is prompted when the above command is run.
scp test.file1:/home/bot21/test/。
运行上述命令时,将提示输入密码。

正确的方法是使用基于密钥的身份验证。


如果该链接中断,只需谷歌搜索:“ssh无密码”或“ssh密钥验证”.尽管托比发表了评论,但我认为自己链接或指导如何搜索比重复别人能说得更好、更深入的内容要好。

你可以使用
sshpass
将密码传递给
scp
。类似于

sshpass -p passw0rd scp test.file1 <Target ip-address>:/home/bot21/test/
其他用户可以在
ps
中看到命令行选项(在运行时它被屏蔽,但在启动时不被屏蔽,您不能依赖它):

请注意,系统上的其他进程也可以使用
/proc/PID/environ
文件访问进程的环境网络变量


最后,将密码存储在文件中看起来可能是最好的主意,但仍然使用其他示例中描述的密钥是使用
ssh
的首选方法。使用
-i
选项。手册页上说:

-i标识\u文件
选择从中获取公钥的标识(私钥)的文件 已读取密钥身份验证。此选项直接传递给 ssh(1)

这就是我们要做的:

scp -i /path/to/identity_file test.file1 <Target ip-address>:/home/bot21/test/
scp-i/path/to/identity\u file test.file1:/home/bot21/test/
详细描述了创建标识文件的过程


身份文件的访问权限的配置方式应确保系统中可能访问该文件的潜在用户能够读取该文件。同时请注意,这些用户应该能够遍历路径,即在我们的示例中,ie
/path/to
,以访问该文件。

scp在后台使用SSH协议。如果可以在没有密码的情况下访问该服务器,它将在没有提示的情况下工作。查看SSH密钥和SSH-agent。虽然这从理论上可以回答这个问题,但请在此处包含答案的基本部分,并提供链接以供参考。
... 23624  6216 pts/5    Ss   Aug30   0:00  \_ /bin/bash
... 12812  1988 pts/5    S+   08:50   0:00  |   \_ sshpass -p passw0rd ssh host
... 45008  5796 pts/15   Ss+  08:50   0:00  |       \_ ssh host
scp -i /path/to/identity_file test.file1 <Target ip-address>:/home/bot21/test/