0

我刚刚开始使用 python 结构在远程机架空间 ubuntu 服务器上运行命令。如果没有需要我输入的命令行,我就无法运行命令。这是我如何重现问题的顺序。

使用密钥和没有密码的 ssh 连接到远程计算机没有任何问题。

这是我的 fabfile.py

from fabric.api import env, run

env.hosts = ['remote.ip.address']
env.user = 'http'

def hello():
    run("touch hello.world")

我用来运行 fabfile.py 的命令(使用 python 2.7 virtualenv)

$ ~/env/py27/bin/fab -f code/fabfile.py hello

这是显示它如何总是卡住并要求我键入 exit 的命令行。

[remote.ip.address] Executing task 'hello'
[remote.ip.address] run: touch hello.world
[remote.ip.address] out: http@server-name:~$ 

我可以通过键入 exit 退出远程终端,命令将运行,我将返回到我的本地终端。

[remote.ip.address] out: exit
[remote.ip.address] out: 

Done.
Disconnecting from remote.ip.address... done.
me@local-computer: $ 

这是我用来设置不需要密码的 ssh 密钥的方法。https://kb.mediatemple.net/questions/1626/Using+SSH+keys+on+your+server

4

2 回答 2

1

有趣,我没有这样的问题,你的代码对我来说很好(直到添加env.key_filenameand env.password

c:\work>fab hello
[x.x.x.x] Executing task 'hello'
[x.x.x.x] run: touch hello.world

Done.
Disconnecting from x.x.x.x... done.

我正在使用 Fabric 1.7.0 和 Paramiko 1.11.0。可能是您服务器上的终端问题。

于 2013-09-13T06:52:40.813 回答
1

好的,我想通了。

我编辑了我的 ~/.profile 文件以包含“bash”命令,以便 bash 成为默认 shell。我在下面复制了旧版本的 ~/.profile 文件。由于fabric 使用/bin/bash 引导它的所有命令,它本质上是启动两个bash 提示并且只退出一个。从服务器中删除 bash 命令后,一切正常。

这是带有额外 bash 命令的 bash 文件。

bash  #REMOVE THIS LINE AND FABRIC WORKS

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
于 2013-09-14T05:18:55.657 回答