Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 以最方便的方式进行SSH,而无需每次键入SSH命令_Macos_Ssh - Fatal编程技术网

Macos 以最方便的方式进行SSH,而无需每次键入SSH命令

Macos 以最方便的方式进行SSH,而无需每次键入SSH命令,macos,ssh,Macos,Ssh,我经常需要登录到远程服务器并做各种工作。我正在使用我的Mac电脑,每次我都要输入一个长命令来完成 ssh -i ~/key.pem ubuntu@255.255.255.255 我想知道不需要每天输入命令就可以登录到远程服务器的最简单方法是什么 方便的苹果应用程序也很受欢迎 更新: 1> 多亏了马特·布莱恩特的回答。通过将~/.ssh/config(默认情况下不存在)修改为 主机 使用者 主机名 标识文件 然后我可以键入此命令,以避免键入主机的全名和密钥的完整路径: ssh <Shor

我经常需要登录到远程服务器并做各种工作。我正在使用我的Mac电脑,每次我都要输入一个长命令来完成

ssh -i ~/key.pem ubuntu@255.255.255.255
我想知道不需要每天输入命令就可以登录到远程服务器的最简单方法是什么

方便的苹果应用程序也很受欢迎

更新:

1> 多亏了马特·布莱恩特的回答。通过将~/.ssh/config(默认情况下不存在)修改为

主机
使用者
主机名
标识文件
然后我可以键入此命令,以避免键入主机的全名和密钥的完整路径:

ssh <ShortName> 
ssh

2> 如果没有pem密钥,有人知道如何存储pem密钥或避免键入密码吗?

使用~/.ssh/config文件。尝试向其中添加以下内容:

Host server                                                                                                  
    User ubuntu
    HostName 255.255.255.255

这将允许您使用
ssh-i~/key.pem服务器登录。如果您查找ssh配置,有许多其他设置将允许您简化和增强ssh体验。

您好B先生W是的,我将发布一个expect脚本,因为它经常出现:

E2A说明适用于linux mac上有expect 这可能意味着为了满足mac的标准而对脚本进行修改,我对此没有足够的知识,但原则上看了一下,下面的过程应该可以工作

您对ssh副本id或脚本感兴趣的是哪一位

要使脚本运行,您需要

sudo-apt-get install expect or 
sudo yum install expect
一旦安装

这是一个典型的脚本:

#!/usr/bin/expect -f


set force_conservative 1  
if {$force_conservative} {
        set send_slow {1 .001}
        proc send {ignore arg} {
        sleep .001
                exp_send -s -- $arg
        }
}

;# Validate user input - make sure all fields required are given 
if {$argc >= 1} {
    ;# Setting  password
    set user "MYUSER";
    set supass "MYPASSWORD"

    set host [lindex $argv 0]
  #     set command1 [lindex $argv 2]

   set prompt "(:|#|%|>|\\\$|% |# |> |\\\$ )"
   set prompt1 "(>)"
   set timeout -1
   ;###############################################################

   ;#connect to specified host given by addstaff or globalstaff.
   spawn ssh $user@$host
   expect { 
        "*word:*" {}
        "*(yes/no)?*" {
                      send - "yes\r" 
                  expect "*word:" { }

                  } 
       }          

   send  - "$supass\r"
  expect eof exit -re $prompt

   send -  "sudo bash\r"
   expect   {
                 "*word:*" {
                         send  "$supass\r"
                         expect  eof exit -re $prompt
                 }
        "*" {  
              expect eof exit -re $prompt
        }

   }

    send  - "whoami\r"
        expect eof exit -re $prompt

    interact 

    ;#send  - "$command\r"
    ;#  expect eof exit -re $prompt

    ;#Logout of current ssh session
    ;#send  - "exit\r"
    ;#expect eof exit -re $prompt

    ;#send  - "exit\r"
    ;#expect eof exit -re $prompt


} else {
  send - "echo Sorry require user host command \n\n\r";
  exit
} 
如果你注意到我已经注释掉了没有发送的命令-它使用交互模式允许你在没有密码的情况下实际登录,用户密码在脚本顶部定义。。。登录后,您可以按照正常ssh的方式键入

我在本地运行它:

 whoami
myuser
./ssh-connection.exp localhost
spawn ssh myuser@localhost
myuser@localhost's password: 
Welcome to Ubuntu 12.04.2 LTS (GNU/Linux XXXX)

 * Documentation:  https://help.ubuntu.com/

Last login: Sat Sep  7 20:19:53 2013 from localhost
sudo bash
This is BASH 4.2- DISPLAY on localhost:0.0

Sat Sep  7 20:25:09 BST 2013
whoami
[20:25 myuser@myuser-DP ~] > sudo bash
whoami
This is BASH 4.2- DISPLAY on localhost:0.0

Sat Sep  7 20:25:09 BST 2013
[20:25 myuser@myuser-DP ~] > whoami
root
[20:25 myuser@myuser-DP ~] > whoami
root

在脚本中,它还会执行sudo bash,这就是为什么它会将我重新连接到本地主机,并使我成为root

感谢您的快速回答,是否可以永久避免键入pem键?这太酷了!因此,如果没有pem密钥,则需要密码。你只需简单地添加密码之类的东西?不。。密码不是这样工作的-如果它需要密码,您可以编写一个expect脚本来封装调用。如果允许的话,您可以将ssh复制id从主机a复制到主机b,从而将pub复制到另一端的授权密钥,并使其成为一个密钥连接on@vahid听起来既难又有趣。你给我发了一些教程等的链接。我可以试一试吗?以明文形式留下密码被认为是一种可怕的做法,但如果你真的想这样做,并且知道没有其他人会使用你的机器,
expect
是一种方法。非常感谢你的评论。这确实是很多新的和有趣的东西。我会先仔细看一看,如果我有进一步的问题,再给你回复。酷W先生,我会尽力帮你的。。首先,我可以在mac上看到expect的安装路径会有所不同,如果这一切都正确,那么第一行应该是#/usr/local/bin/expect-f。安装后,运行一个期望找到真实路径并进行相应修改的
 whoami
myuser
./ssh-connection.exp localhost
spawn ssh myuser@localhost
myuser@localhost's password: 
Welcome to Ubuntu 12.04.2 LTS (GNU/Linux XXXX)

 * Documentation:  https://help.ubuntu.com/

Last login: Sat Sep  7 20:19:53 2013 from localhost
sudo bash
This is BASH 4.2- DISPLAY on localhost:0.0

Sat Sep  7 20:25:09 BST 2013
whoami
[20:25 myuser@myuser-DP ~] > sudo bash
whoami
This is BASH 4.2- DISPLAY on localhost:0.0

Sat Sep  7 20:25:09 BST 2013
[20:25 myuser@myuser-DP ~] > whoami
root
[20:25 myuser@myuser-DP ~] > whoami
root