如何在不输入密码的情况下通过SSH远程复制文件
当我们需要远程管理计算机时,SSH是救生员,但是我们知道我们也可以上传和下载文件吗?使用SSH密钥,我们可以不必输入密码并将其用于脚本!
只要正确配置了SSH访问权限,此过程即可在Linux和Mac OS上运行。如果我们使用Windows,则可以使用Cygwin获得类似Linux的功能,并且稍作调整,SSH也将运行。
通过SSH复制文件
安全复制是一个非常有用的命令,并且非常易于使用。该命令的基本格式如下:
scp [options] original_file destination_file
最大的问题是如何格式化远程部分。在寻址远程文件时,我们需要按以下方式进行操作:
user@server:path/to/file
服务器可以是URL或者IP地址。这之后是一个冒号,然后是该文件或者文件夹的路径。让我们来看一个例子。
scp –P 40050 Desktop/url.txt [email protected]:~/Desktop/url.txt
此命令具有[-P]标志(请注意其大写字母P)。这使我可以指定端口号而不是默认的22. 这对我来说是必需的,因为我已经配置了系统。
接下来,我的原始文件是url.txt,它位于名为Desktop的目录中。目标文件位于~/ Desktop / url.txt中,与/user/yatri/Desktop/url.txt相同。用户yatri在远程计算机192.168.1.50上运行此命令。
如果我们需要做相反的事情怎么办?我们可以类似地从远程服务器复制文件。
在这里,我已经将文件从远程计算机的~/ Desktop /文件夹复制到了我的计算机的Desktop文件夹。
要复制整个目录,我们需要使用[-r]标志(请注意,它是小写的r)。
我们还可以组合标志。代替
scp –P –r …
你可以做
scp –Pr …
这里最难的部分是选项卡补全并不总是有效,因此让另一个带有SSH会话的终端运行很有帮助,这样我们就可以知道其中放置东西。
没有密码的SSH和SCP
安全复制很棒。我们可以将其放在脚本中,并备份到远程计算机。问题是我们可能不总是要输入密码。而且,说实话,将密码输入到我们显然一直可以访问的远程计算机上确实是一个很大的麻烦。
好吧,我们可以通过使用密钥文件来避免使用密码。我们可以让计算机生成两个密钥文件,一个密钥文件属于远程服务器,而一个密钥文件属于计算机,需要安全,并且将使用私人密钥来代替密码。很方便吧?
在计算机上,输入以下命令:
ssh-keygen –t rsa
这将生成两个密钥并将其放入:
~/.ssh/
私钥名称为id_rsa,公钥名称为id_rsa.pub。
输入命令后,将询问我们将密钥保存在何处。我们可以按Enter键使用上述默认值。
接下来,将要求我们输入密码。按Enter键,将其保留为空白,然后在要求确认时再次进行。下一步是将公钥文件复制到远程计算机。我们可以使用scp执行此操作:
公共密钥的目标位于远程服务器上的以下文件中:
~/.ssh/authorized_keys2
随后的公钥可以添加到此文件,非常类似于~/ .ssh / known_hosts文件。这意味着,如果要在此服务器上为帐户添加另一个公钥,则可以将第二个id_rsa.pub文件的内容复制到现有authorized_keys2文件的新行中。