我需要运行一个脚本,其中包含一些必须以 root 身份运行的指令和一个 scp:
sbt assembly # requires sudo
scp -r -p myfile [email protected]:/root/spark/root # doesn't require sudo
我用 运行它sudo python3 ./myscript.py
。
另外,我将 ssh 配置为myserver
使用 ssh 密钥进行通信:
Host [email protected]
PubKeyAuthentication yes
IdentityFile ~/.ssh/mykey
IdentitiesOnly=yes
PreferredAuthentications=publickey
StrictHostKeyChecking=no
然后我在我的 shell 启动脚本中,在 ssh-agent 中注册了我的 ssh 密钥~/.zshrc
:
eval `ssh-agent`
ssh-add ~/.ssh/kiliba
请注意,我的公钥已有效注册myserver
,并且我可以通过 ssh 或 scp 连接到该服务器,这意味着我的 ssh 配置有效,并且我的 ssh 密钥有效。
但是,当使用 sudo 运行此脚本时,scp 会不断要求我输入密码,这意味着我的 ssh 配置未被使用。我似乎已经做了让 scp 与 sudo 配合使用所需的一切,但我肯定遗漏了某些内容。请注意,奇怪的是,whilesudo scp
不起作用,但确实sudo ssh
起作用。
有趣的细节:在另一台机器上,我设法让它工作,但是我肯定是在一年前做的,我记不清我做了什么让它工作了。这是一台 Mac,我现在的机器上装的是 Ubuntu。
答案1
主机名应该只是服务器地址,而不是 uri。
[email protected]
我应该写,而不是myserver.com
,并在下面添加一条规则来指定用户名:
Host myserver.com
User root
PubKeyAuthentication yes
IdentityFile ~/.ssh/mykey
IdentitiesOnly=yes
PreferredAuthentications=publickey
StrictHostKeyChecking=no