AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 106722
Accepted
JP Silvashy
JP Silvashy
Asked: 2010-01-27 22:34:13 +0800 CST2010-01-27 22:34:13 +0800 CST 2010-01-27 22:34:13 +0800 CST

选择 SSH 使用的 shell?

  • 772

如何设置用户通过 SSH 连接到服务器时使用的 shell。例如,我无法忍受 BASH 并且需要使用 ZSH,我该如何制作,以便.zsh_profile在我 ssh 到机器时将 ZSH 与我的配置文件()一起加载。

我也不想用ssh传递一堆参数,我不能设置默认shell吗?

shell
  • 7 7 个回答
  • 103400 Views

7 个回答

  • Voted
  1. Dominic Barnes
    2010-01-27T22:36:14+08:002010-01-27T22:36:14+08:00

    假设您在 Linux 上运行,您可以使用该chsh命令。

    chsh -s /bin/ksh foo
    chsh -s /bin/bash username
    
    • 50
  2. Best Answer
    Mark
    2017-03-09T08:41:06+08:002017-03-09T08:41:06+08:00

    如果您无法更改默认外壳,则ssh -t user@host 'zsh -l'可以使用。

    该-t标志强制进行伪 tty 分配,并且该-l标志生成一个登录 shell。

    • 17
  3. unknown
    2010-01-27T22:38:55+08:002010-01-27T22:38:55+08:00

    man chsh更改外壳,并不总是有效

    或者,您可以坚持exec /bin/zsh使用您的 bash 登录脚本。这将用您的 shell 替换 bash 实例。

    或者你可以做ssh host "zsh -l"

    • 14
  4. Valentin Rocher
    2010-01-27T23:02:23+08:002010-01-27T23:02:23+08:00

    编辑 /etc/passwd(如果您有权限,或询问您的系统管理员)以更改您的默认 shell。

    • 10
  5. user235422
    2018-06-11T21:39:38+08:002018-06-11T21:39:38+08:00

    我不确定如何将本地服务器放到.zshrc远程服务器上(即没有将其永久存储在那里),这对我来说可以更改远程服务器上的登录 shell。

    由于它是一个共享帐户,因此我zsh只能通过这种方法使用自己。

    将此添加到~/.ssh/config本地计算机中的文件中。

    Host yourServer
        HostName <IP, FQDN or DNS resolvable name>
        IdentityFile ~/.ssh/<your keyfile>
        RemoteCommand zsh -l
        RequestTTY force
        User <yourUsername>
    

    可能有一些骇人听闻的方式来完成您正在寻找的东西,如下所示。

    警告 这没有任何保证,看起来也不“明智”,但是我确实设法将我的本地文件放到服务器上,并使用它在登录 shell 中获取它。

    Host someHost
        HostName someIP
        IdentityFile ~/.ssh/somekey.pem
        RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
        PermitLocalCommand yes
        LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
        RequestTTY force
        User someUser
    

    这个怎么运作?

    • RemoteCommand定义需要在远程端运行的内容。
    • LocalCommand定义需要在本地运行的内容,用于将本地文件复制到远程服务器以获取它。这是一个问题,它仅在“成功”连接到远程主机后才会发生。

    意义:

    1. 您与远程的连接应该是开放的并且是活跃的
    2. 你的远程shell还没有文件,所以它必须等到文件在那里,ergosleep
    3. 您的本地使用sftp将您的文件放到远程服务器,远程服务器从您的脚本中唤醒sleep并获取您的脚本。

    这是超级hackish,我也想知道是否有更好的方法。

    更新:这可以用来代替“长”睡眠时间:
    RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'

    • 7
  6. Ayka
    2021-10-29T21:26:30+08:002021-10-29T21:26:30+08:00

    如果您使用的是 Windows:

    • 要使用 PowerShell 5,请使用ssh -t <username@servername> "powershell"
    • 要使用 PowerShell Core,请使用ssh -t <username@servername> "pwsh"
    • 使用bash(Git Bash 或 WSL),使用ssh -t <username@servername> "bash"
    • 3
  7. Regis
    2021-01-30T06:19:42+08:002021-01-30T06:19:42+08:00

    关于原始问题:更改由 SSH 会话打开的 shell,我认为它不可配置。您可以更改用户在系统上使用的 shell(chsh或编辑 /etc/passwd),甚至可以更改机器的默认 shell,但不能更改 SSH shell(我认为 SSH 只是使用用户的参数打开一个常规会话,包括外壳配置)。

    • 1

相关问题

  • 如何在 Mac OS X 上的 shell 脚本中检索绝对文件名?

  • 强制 rsync 进入非交互模式

  • ssh 中类似 Bash 的命令替换或如何从 ssh *client* 请求内容?

  • unlink 和 rm 有什么区别?

  • 如何将 VAR 从子 shell 导出到父 shell?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve