ssh连接

ssh

SSH是一种网络协议,用于计算机之间的加密登录。

如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。

此外,本文只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。
参考:SSH原理与运用(一):远程登录
数字签名-阮一峰

使用
ssh user@host

当远程用户名与本地用户名一致时,登录名可以省略,即

ssh host

SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。

ssh -p 2222 user@host
公钥登陆

所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
(之前自己读这段话,不太理解,后来看了阮一峰的这篇博客,数字签名-阮一峰,然后就理解这个过程了)
总之,公钥登陆这种办法不需要用户在每次登录的时候输入密码。下面是这种方法实现的步骤

一、用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:

ssh-keygen

运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。

二、这时再输入下面的命令,将公钥传送到远程主机host上面:

ssh-copy-id user@host

公钥上传成功后,之后就不需要输入密码了
注意,还可以通过这种方式上传公钥:
远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,因此,只要把它追加在authorized_keys文件的末尾就行了。
如果用户主目录中的.ssh目录不存在,就创建一个;

mkdir -p .ssh

假设,已经上传id_rsa.pub文件到了这个目录下,然后运行:

cat >> .ssh/authorized_keys < id_rsa.pub

还可以在本地直接使用下面的代码,一步上传。

ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

如果添加了公钥之后,依然需要输入密码登录,可能需要更改文件的读写权限,例如:

chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
快速登陆(配置config文件)

在客户端配置一个config文件,从而能够实现根据自定义的名称快速登陆远程服务器。
如果没有,就自己创建一个配置文件(~/.ssh/config),这个目录下指的是配置只针对用户自身。

(我配置好的就不贴出来了。)
Host your_name
HostName 192.169.1.2
Port 22
User your_username
IdentityFile ~/.ssh/id_rsa

更多参数参考:ssh_config

配置好后,保存起来,之后登陆就可以直接ssh your_name登陆了

远程文件操作:
scp

Linux scp 命令用于 Linux 之间复制文件和目录。

scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
1、从本地复制到远程
复制一个本地文件到远程的文件夹下

scp local_file remote_username@remote_ip:remote_folder

当复制一个目录时,使用参数-r,即可完成操作:

scp -r local_folder remote_username@remote_ip:remote_folder

2、从远程复制到本地

从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可

scp -r remote_username@remote_ip:remote_folder  local_folder

注意,1.如果远程服务器防火墙有为scp命令设置了指定的端口,我们需要使用 -P 参数来设置命令的端口号,命令格式如下:

#scp 命令使用端口号 4588
scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator

2.使用scp命令要确保使用的用户具有可读取远程服务器相应文件的权限,否则scp命令是无法起作用的

OpenSSH被广泛使用,但是因为免费开源,基本很少公司资助过OpenSSH资助,于是官网页面就很简陋。。更多参考请访问OpenSSH

<think>嗯,用户想了解SQL注入的概念和攻击原理。首先,我需要回忆一下相关的知识。根据引用[2],SQL注入攻击是因为后台的SQL语句是拼接用户提交的参数,如果用户提交的参数中掺杂了SQL关键字或特殊符号,就会改变原语句的语义。比如在不知道密码的情况下登录,甚至不需要用户名和密码也能登录。这说明攻击者通过输入恶意内容来干扰正常的SQL查询结构。 然后引用[3]提到,SQL注入利用了Web应用对SQL语句处理不当的情况,攻击者插入恶意代码,从而控制或欺骗数据库。这可能导致未授权数据访问或完全控制数据库。比如在登录表单中输入' OR '1'='1,这样构成的SQL语句可能会绕过身份验证。 引用[5]中的二次注入例子也很重要,虽然用户可能暂时没问到,但说明注入不仅限于即时输入,还可能通过存储的数据后续触发。比如插入时转义了单引号,但查询时直接从数据库取出未转义的数据导致注入。 接下来需要组织这些信息,用简单易懂的中文解释概念和原理。要分点说明,结构清晰。用户可能对技术细节不太熟悉,所以需要举例说明,比如那个经典的OR '1'='1的例子。同时要引用相关的引用来源,比如在解释原因时引用[2][3]。 还要注意用户要求中的格式,比如数学表达式用$...$,但这里可能用不上。生成的问题要相关,比如攻击方式、危害、防护方法,以及二次注入等。确保问题覆盖用户可能想进一步了解的方面。</think>### SQL注入的概念与攻击原理 #### 1. 基本概念 **SQL注入**(SQL Injection)是一种针对数据库的网络安全攻击方式,攻击者通过在用户输入中嵌入恶意SQL代码,欺骗后端数据库执行非预期的操作。例如,攻击者可能通过输入`' OR '1'='1`绕过登录验证,导致无需密码即可登录系统[^2][^3]。 #### 2. 攻击原理 SQL注入的核心原理是**利用应用程序未对用户输入进行有效过滤**,直接将输入拼接到SQL语句中执行。例如: - 正常登录查询语句: $$SELECT * FROM users WHERE username='[用户输入]' AND password='[用户输入]'$$ - 攻击者输入用户名`admin' --`,密码任意值,则语句变为: $$SELECT * FROM users WHERE username='admin' --' AND password='xxx'$$ 其中`--`是SQL注释符,后续条件被忽略,直接以管理员身份登录[^2][^4]。 #### 3. 攻击危害 - **未授权数据访问**:窃取敏感数据(如用户信息、密码)。 - **数据篡改或删除**:修改或清空数据库内容。 - **权限提升**:通过执行系统命令控制服务器[^4]。 #### 4. 典型攻击方式 1. **联合查询注入**:通过`UNION`合并恶意查询,获取其他表数据。 示例:`' UNION SELECT credit_card FROM payments --` 2. **布尔盲注**:根据页面返回的真/假状态推测数据内容。 示例:`' AND (SELECT SUBSTRING(password,1,1) FROM users)='a' --` 3. **二次注入**:恶意数据先被存储,后续使用时触发注入(如从数据库读取未过滤的数据)[^5]。 #### 5. 防御措施 - **参数化查询**:使用预编译语句(如PHP的PDO、Java的PreparedStatement),避免直接拼接SQL。 - **输入过滤与转义**:对特殊字符(如`'`、`#`、`--`)进行转义处理。 - **最小权限原则**:限制数据库账户权限,避免执行高危操作[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值