【问题标题】:Use sudo with SSH-Session from PowerShell在 PowerShell 中使用 sudo 和 SSH-Session
【发布时间】:2015-11-23 07:18:33
【问题描述】:

在我的 Windows 计算机上,我在 PowerShell 上使用 SSH-Session 模块,我想使用 sudo 在我的服务器中执行特殊命令。

但是当我通过 SSH-Session 启动我的sudo 命令时,我遇到了这个错误:

sudo:不存在 tty,也没有指定 askpass 程序

我不想使用 PuTTY 或 ssh 命令,所以参数 -l 不是问题!

如果可能的话,我不想更改 SSH 服务器配置。

我想知道如何在PowerShell中强制伪分配tty?

谢谢

【问题讨论】:

  • 您是否可以修改您的 sudoers 文件以允许该用户的特定设置?基本上 SSH-Session 是基于 SSH.NET (sshnet.codeplex.com)。据我所知,它不支持启用 psuedo-tty(我相信这可以解决这个问题)。所以你需要做的在这个答案中有详细说明:unix.stackexchange.com/a/80159/1347(我认为...... :))
  • 在 Linux 控制台中,我可以毫无问题地使用同一用户执行我的 sudo 命令。我认为没有必要更新sudoers file,而是 PowerShell 上的一个选项(如果存在)

标签: windows powershell ssh powershell-2.0 sudo


【解决方案1】:

SSH-Session 模块基于SSH.NET library

SSH.NET 库确实支持伪终端分配,但 SSH-Session 模块不公开该功能。

您必须修改 SSH-Session 代码才能使其可用。

  • 要么使用 Shell 类 (SshClient.CreateShell),它隐式请求伪终端。

  • 或者使用ChannelSession.SendPseudoTerminalRequest显式请求伪终端。


或者修改你的sudoers configuration file 不要求sudo 的伪终端(顺便删除默认关闭的requiretty 选项)。


或者直接使用 SSH.NET,不用 SSH-Session 模块。

查看这些问题以获取一些代码:

【讨论】:

  • 谢谢@MartinPrikryl,但你知道我必须在哪里修改代码吗?
  • 没有。不使用 SSH-Session 模块直接使用 SSH.NET 怎么样?
  • SSH-Session 不是在 PowerShell 中通过 SSH.NET 使用 SSH 的唯一方法?
  • SSH.NET 是 .NET 库。您可以在 PowerShell 中使用任何 .NET 库。一些代码见stackoverflow.com/q/24436507/850848stackoverflow.com/q/19864617/850848
【解决方案2】:

您现在可以使用 Open SSH exe,由 Microsoft here 推送。

以管理员身份启动PowerShell

ssh 192.168.1.123 -p 22 -l general03

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2012-11-22
    • 1970-01-01
    • 2011-03-28
    • 2019-02-28
    相关资源
    最近更新 更多