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 / 问题 / 400522
Accepted
gsgx
gsgx
Asked: 2012-06-21 05:01:43 +0800 CST2012-06-21 05:01:43 +0800 CST 2012-06-21 05:01:43 +0800 CST

如何在 SSH 登录时使用自定义 .bashrc 文件

  • 772

我发现在与我合作的新公司中,我经常不得不访问生命周期相对较短的 linux 服务器。在这些服务器中的每一个上,我都有一个帐户,但每当创建一个新帐户时,我都必须经历通过我的 .bashrc 进行传输的麻烦。然而,有可能在大约一个月的时间内该服务器将不再存在。我还必须在短时间内(几分钟)访问许多其他服务器,在这些服务器上传输我的 .bashrc 是不值得的,但由于我在很多服务器上工作,这加起来浪费了很多时间。

我不想更改服务器上的任何内容,但我想知道是否有一种方法可以拥有“每个连接”.bashrc,因此每当我通过 SSH 连接到服务器时,我的设置都会用于该会话。

如果可能的话,如果我可以对其他配置文件(如 gitconfig 文件)执行相同的操作,那就太好了。

bash ssh configuration bashrc
  • 6 6 个回答
  • 29749 Views

6 个回答

  • Voted
  1. RussellStewart
    2014-09-12T23:28:20+08:002014-09-12T23:28:20+08:00

    我认为 sshrc 是你要找的: https ://github.com/Russell91/sshrc

    sshrc 的工作方式与 ssh 类似,但它在远程登录后也会获取 ~/.sshrc 的资源。

    $ echo "echo welcome" > ~/.sshrc
    $ sshrc me@myserver
    welcome
    
    $ echo "alias ..='cd ..'" > ~/.sshrc
    $ sshrc me@myserver
    $ type ..
    .. is aliased to `cd ..'
    

    您可以使用它来设置环境变量、定义函数和运行登录后命令。就是这么简单,而且不会影响服务器上的其他用户——即使他们也使用 sshrc。如需更高级的配置,请继续阅读。

    • 16
  2. Best Answer
    Quinn Murphy
    2012-06-21T17:42:52+08:002012-06-21T17:42:52+08:00

    我想你想要的是(在你连接的机器上的 .ssh/config 中):

    PermitLocalCommand yes
    LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc
    

    然后你可以开始:

    source .bashrc
    

    并在你快乐的路上。LocalCommand 会在您连接到的服务器上执行命令,就在您实际会话之前。

    我还要确保服务器上的 sshds 配置了PermitLocalCommand yes

    有很多方法可以调整 LocalCommand 以使其在您的特定环境中工作——例如,您可以从内部 Web 服务器卷曲,或者从 nfs 挂载中拉取。

    • 8
  3. Dr. Edward Morbius
    2012-06-21T16:51:55+08:002012-06-21T16:51:55+08:00

    如果您以前从未访问过服务器,则 ~/.ssh/known_hosts 中不会有它的条目。

    您可以使用“ssh-keygen -F ”搜索给定的已知主机,但您必须测试该输出 (grep),因为 ssh-keygen 不会因未命中而返回 false。请注意,如果您通过不同的标识符(IP 地址、主机名、FQDN)引用主机,则这些标识符均被视为单独的实例。

    您可以为 ssh 编写一个包装器,在第一次登录时将您的用户环境传输到该主机:

    ssh-newenv () { 如果!ssh-keygen -F $1 | grep -q "^# 找到主机 $1:"; 然后 rsync ~/.bashrc ~/.bash_profile ~/.bash_logout $1:.; 菲; ssh $1;}

    如果你想让它更健壮,你可以检查远程主机上是否存在已知的环境文件、散列或其他标记。

    • 1
  4. user967489
    2015-06-07T09:32:15+08:002015-06-07T09:32:15+08:00

    我认为https://github.com/fsquillace/kyrat(以前称为 Pearl-ssh)可以满足您的需求。

    我在 sshrc 诞生之前很久就写了它,它与 sshrc 相比有更多的好处:

    • 它不需要两个主机都依赖于 xxd(在远程主机上可能不可用)
    • Kyrat 使用更高效的编码算法
    • 它只有大约 20 行代码(真的很容易理解!)

    例如:

    $> echo "alias q=exit" > ~/.config/kyrat/sshrc
    $> kyrat [email protected]
    myserver.com $> q
    exit
    
    • 1
  5. Christopher Perrin
    2012-06-21T05:55:15+08:002012-06-21T05:55:15+08:00

    我不知道每个会话是否有 .bashrc 。

    另一种解决方案是编写一个小脚本,将所有您喜欢的配置传输到您的新主文件夹。

    也许只是用你所有的配置和路径创建文件夹,然后用 scp 传输它们

    喜欢

    /home/foobar/configs/.bashrc
    /home/foobar/configs/.foo/bar.conf
    ...
    

    然后一个

    scp -r /home/foobar/configs/* [email protected]:/home/foo/
    

    这样可以节省时间。

    • 0
  6. Oliver
    2012-06-21T05:58:40+08:002012-06-21T05:58:40+08:00

    我认为这是不可能的,因为 ssh 与您的.bashrc. 加载该文件的是 shell,而不是 ssh。

    一些想法:

    1. 首次登录时设置远程主目录。
    2. 使用 NFS 在每台服务器上挂载包含 .bashrc 的主目录。这样,您在任何地方都有相同的设置。
    3. 如果您只接受将一些环境变量传输到远程服务器,则应该检查该SendEnv选项(ssh_config有关更多信息,请参见手册页)。如果服务器设置正确(即它AcceptEnv在 sshd_config 中有足够的设置),您可以使用SendEnv将环境变量复制到远程主机。
    4. 我不知道这是否有效,但也许您可以在连接到远程主机之前误用ProxyCommand设置(参见ssh_config手册页)来发送您的文件或其他文件。.bashrc不过,这需要进行一些测试。另外,请准备好这可能会干扰 scp。
    • 0

相关问题

  • Mac OS X:从 python 脚本中更改 $PATH

  • Bash 脚本:要求脚本以 root 身份运行(或使用 sudo)

  • crontab ifconfig 什么都不输出

  • 使用命令行工具按排序顺序计算重复项

  • 是否有 bash 等效于 ruby​​ 的“一些内容#{foo}”?

Sidebar

Stats

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

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

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

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

    • 9 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +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