linux添加ssh地址 windows宝塔怎么像linux一样执行ssh?

[更新]
·
·
分类:互联网
3819 阅读

linux添加ssh地址

windows宝塔怎么像linux一样执行ssh?

windows宝塔怎么像linux一样执行ssh?

有,Windows安装自带的telnet server,就可以通过telnet登录

为何多数git教程里添加远程库默认推荐ssh,而不是智能http(s) 协议(无需ssh密钥)?

4种git支持的协议中,ssh 配置简单,权限管理也比较全面,无需密码,且linux 内置,当然会有偏向平台的。git协议是运行最快的,基本上和操作系统关系不大,就是git-daemon 启动,然后git-clone。对那些人来说,快是很重要的。
至于 smart http 很慢,并且,配置真的(相对)复杂,需要了解cgi的概念,环境变量概念,特定的web server的配置方法,以及特定操作系统的配置方法。我看到的pro git中的smart http配置,就是缺少一些步骤的。
我刚刚写了文章,对比了下,ssh,git配置大概半页,http3页而且只能适应于osx,apache的组合。可以欣赏下:
正文
## 更多协议
想要和他人协作,我必须有远程仓库,这样我才可以推送和拉取代码的变更。在上一节,我们已经通过一个共享仓库作为中介,以本地协议的通讯方式,达成两人(多人)的代码协作了。
git支持4种协议,包括本地协议、HTTP协议、Git协议、SSH协议。我们继续看看Git协议。
## Git 协议
通过Git协议来托管仓库是内置于git-daemon命令之内。因此使用它来做测试和验证仓库的托管是非常方便的。执行 git-daemon,会启动一个监守程序,等待采用git协议来连接的客户端,这些连接过来的客户端可以访问指定目录下的仓库。
假设我们在~/git目录内已经存在一个共享仓库,那么
cd ~/git
git daemon --verbose --export-all --base-path. --enablereceive-pack
这里的新命令git-daemon需要做些解释。参数说明:
--base-path. 指定基础目录,客户端连接指定的目录都相对于此目录来定位目录。当前命令行内的基础目录就是 ~/git
--enablereceive-
--export-all 公开全部仓库
启动了git监守程序,就可以在客户端运行git-clone来拉取仓库了:
git clone
我们使用的主机地址为localhost,就是意味着拉取的仓库位于本机;你可以使用IP地址,就可以访问其他主机的托管仓库了。
## SSH 协议
以 OS X 为例,首先激活sshd:
sudo systemsetup -setremotelogin on
随后远程登录到主机(为了演示和测试的方便,远程主机使用localhost来做模拟),并输入密码:
ssh localhhost
然后创建一个共享仓库:
mkdir
cd
git init --bare --shared
exit
这时我们已经准备好了一个空仓库,可以在另外一个主机(也是本机)做克隆了。
git clone
使用git-remote来查询远程仓库:
$git remote -v
origin ssh://localhost/Users/lcjun/gitshared (fetch)
origin ssh://localhost/Users/lcjun/gitshared (push)
即可验证命令确实有效的被执行了,ssh远程仓库也已经和本地关联起来了。
## HTTP
HTTP 协议下的git托管是相对最复杂的,因为它涉及到了Web Server的配置,CGI知识,特定的OS。WebServer和操作系统的版本差异也会对应有不同的配置方法。我的操作系统是OS X EI Captain,Git 版本为2.6,Apache 版本为2.4 。我以本机为服务器,本机地址为192.168.3.11 。在这样的环境下,我希望可以使用
git clone
的形式,以http协议方法访问主机上的 仓库。留意URL的第一部分是http,而不是ssh,或者git。
假设仓库以 /var/www/git 存放。我在此目录内创建一个名为 的仓库:
mkdir -p
cd
git init --bare --shared
在本机内,找到 hosts 文件,并加入如下一行,以便支持通过主机名()访问主机
192.168.3.11
我采用apache作为Web 服务器,首先保证apache是启动和可以访问的:
$ sudo apachectl start
$ curl localhost
lthtmlgtltbodygtlth1gtIt works!lt/h1gtlt/bodygtlt/htmlgt
¥ curl
lthtmlgtltbodygtlth1gtIt works!lt/h1gtlt/bodygtlt/htmlgt
git-http-backend 需要引用模块 cgi,env,alias。必须它们是被加载了的。具体的做法是查看 ,确保一下模样的行是没有被标注的。如果被标注(行首有一个#),那么通过去掉“#”来解除标注。我的主机上,的位置在 。
LoadModule cgi_module libexec/apache2/mod_
LoadModule env_module libexec/apache2/mod_
LoadModule alias_module libexec/apache2/mod_
找到 ,加入如下配置在文件末尾,它添加了一个名为的虚拟主机,它的文档目录为/var/www/git:
ltVirtualHost 192.168.3.11:80gt
DocumentRoot /var/www/git
ServerName
ltDirectory /var/www/gitgt
Options Indexes
Require all granted
lt/Directorygt
ltDirectory /usr/local/Cellar/git/2.4.1/libexec/git-core/gt
Options ExecCGI Indexes
Order allow,deny
Allow from all
Require all granted
lt/Directorygt
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv GIT_PROJECT_ROOT /var/www/git
ScriptAlias /git/ /usr/local/Cellar/git/2.4.1/libexec/git-core/git-http-backend/
lt/VirtualHostgt
同时,这段配置内还添加了一个脚本别名,别名指向git-http-backend的CGI程序。git-http-backend 在不同的系统上可能位置不同,可以使用这个命令查找到它:
$ find / -name git-http-backend 2gt/dev/null
为了让此CGI 可以运行,也必须配套的把CGI所在目录设置为允许执行CGI(Options ExecCGI)。
GIT_PROJECT_ROOT 必须设置,这个值是 git-http-backend 需要的,有了它,git-http-backend 就知道如何定位基础目录了。环境变量 GIT_HTTP_EXPORT_ALL 看起来有点熟悉,是因为我们在上一节git 协议内在git守护进程的命令行中看到过它。设置了此环境变量,就意味着在基础目录内的所有仓库都是可以对外共享的。
进入需要克隆的git仓库所在的目录并执行git update-server-info:
cd
sudo git update-server-info
重启apache
sudo apachectl restart
随后,我就可以真的去克隆一个在apache服务后的git仓库了:
git clone
Cloning into repo...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
这个配置过程相对复杂,难免配置是出现不期望的错误,那么常备些命令是可以帮助调试的。比如查看Apache 运行错误
sudo tail /private/var/log/apache2/error_log
我需要多次修改 ,记得使用:
apachectl configtest
验证下配置是正确的。我发现这个命令对我是有用的。
#找到apache 用户的方法
$ ps aux | egrep (apache|httpd).
#找到apache用户组的方法:
$ id user-name
user-name 换成apache 用户名
在我的主机上,我在升级git的时候,曾经出过这样的报错:
$brew upgrade git
# Git package broken in 10.11 El Capitan
brew reinstall git
...
gt make prefix/usr/local/Cellar/git/2.4.3 sysconfdir/usr/local/etc CCclang C
./git-compat-util.h:219:10: fatal error: openssl/ssl.h file not found
#include ltopenssl/ssl.hgt
^
我尝试了改变下命令行参数的方式:
brew reinstall git --with-brewed-openssl
结果是可以升级到最新的git版本的(git 2.6.4)