‘壹’ sftp创建新账户并指定目录
首先 你的openssh-server版本至少得是4.8p1,因为配置权限需要版本添加的新配置项ChrootDirectory来完成。 如何查看自己服务器上的ssh版本?大家可以尝试以下命令: # ssh -V 步骤: 1. 我们需要创建一个用户组,专门用于sftp用户 # groupadd sftpusers ps我里的用户组是sftpusers 2. 我们创建一个用户user # useradd -s /bin/false -G sftpusers user ps注意这里我们将user用户的shell设置为/bin/false使他没有登陆shell的权限 # passwd user ps设置user用户密码 3. 编辑/etc/ssh/sshd_config 找到Subsystem这个配置项,将其修改为 Subsystem sftp internal-sftp 然后再到文件最尾处增加配置设定属于用户组sftpusers的用户都只能访问自己的文件夹 Match Group sftpusers X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp ChrootDirectory /data/sftp/%u #需在 /data/sftp/ 创建user文件夹,该文件夹就是登录的sftp用户目录 保存并关闭 4. 修改user用户所在文件夹的权限,让其属于root用户 # chown root /data/sftp/user 5. 重启sshd服务 # service sshd restart 6. 测试用户账号 # ssh user@localhost ps连接会被拒绝,证明该用户没有ssh shell登录的权限 # sftp user@localhost 登陆后你会发现你的账号无法切换到除自己本身目录之外的地方;ps或者登录失败,看下面可能出现的问题; 问题: 1,如果在链接服务器的时候出现下面的提示: Write failed: Broken pipe Couldn't read packet: Connection reset by peer 这个问题的原因是ChrootDirectory的权限问题,你设定的目录必须是root用户所有,否则就会出现问题。所以请确保sftp用户根目录的所有人是root,权限是750 或者755。 解决:设置user目录为root权限,# chown root:user /data/sftp/user #chmod 750 /data/sftp/user 2,Sftp用户登录后不能在本目录操作: 是因为登录后的目录是root权限,需将sftp账号赋予root权限,操作方法将 /etc/passwd 文件中对应的sftp的用户ID修改为0,这样就可以有权限操作登录后的目录了(还有其他赋予权限方法,ps另行查找)。Eg:user:x:503:505::/home/darops:/bin/false 将503改为0‘贰’ 创建文件夹的代码
你好:
Java端创建的代码为:
public void mkdir(String mkdirName)
{
try
{
File dirFile = new File(mkdirName);
boolean bFile = dirFile.exists();
if( bFile == true )
{
System.out.println("The folder exists.");
}
else
{
System.out.println("The folder do not exist,now trying to create a one...");
bFile = dirFile.mkdir();
if( bFile == true )
{
System.out.println("Create successfully!");
System.out.println("创建文件夹");
}
else
{
System.out.println("Disable to make the folder,please check the disk is full or not.");
System.out.println(" 文件夹创建失败,清确认磁盘没有写保护并且空件足够");
System.exit(1);
}
}
}
catch(Exception err)
{
System.err.println("ELS - Chart : 文件夹创建发生异常");
err.printStackTrace();
}
}
}
C#端的代码为:
Directory.CreateDirectory()
1.Directory.CreateDirectory (String) 按 path 的指定创建所有目录和子目录。由 .NET Compact Framework 支持。
2. Directory.CreateDirectory (String, DirectorySecurity) 创建指定路径中的所有目录,并应用指定的 Windows 安全性。
js代码为:
<html>
<head>
<title>创建和删除文件夹</title>
</head>
<body>
<h2>创建和删除文件夹</h2>
<hr>
<script language="JavaScript">
var strFolder = "c:\\test";
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
// 检查文件夹是否存在
if (!objFSO.FolderExists(strFolder)){
// 创建文件夹
var strFolderName = objFSO.CreateFolder(strFolder);
document.write("创建文件夹: " + strFolderName + "<br>");
}
// 检查文件夹是否存在
if (objFSO.FolderExists(strFolder)){
document.write("文件夹: " + strFolder + "存在<br>");
‘叁’ 如何使用SSH登录远程服务器
默认配置
Windows下有很多SSH工具。在这里我是用的是Putty。如果安装了Git并配置使用Putty的话,就不需要另外在安装Putty了。使用SSH连接服务器的命令如下:
ssh IP地址1
一般来说为了安全性考虑,端口号等一些参数并不会使用默认值。这样的话命令就变成这样:
ssh 用户名@IP地址 -p 端口号1
如果连接成功的话会提示你输入远程服务器的密码。全部成功之后SSH就会显示远程服务器的提示符,这时候就说明连接成功了。
密钥登录
每次登录SH都需要输入密码很麻烦,而且可能不太安全。SSH还能使用另外一种登录方式,也就是使用密钥登录。这种登录方式需要客户端生成一堆公钥私钥对,然后将公钥添加到服务器中,这样下次就可以直接登录了。
首先生成SSH密钥,依照提示输入信息即可。默认生成在用户主目录中的.ssh文件夹中。带pub的是公钥,接下来需要添加到服务器中。
ssh-keygen1
然后将本地公钥添加到服务器中,需要使用另一个命令:
scp -P 端口号 本地文件路径 用户名@远程服务器地址:远程路径1
然后登陆服务器,找到复制进去的公钥,将公钥名字改为authorized_keys并添加到对应的.ssh文件夹中。然后退出SSH重新登陆试试,成功的话不需要输入密码就会直接进入远程服务器。
‘肆’ [iOS逆向之路一]SSH登录iPhone
例: ssh [email protected]
位置在/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
https://git.sukimashita.com/usbmuxd.git/
选择1.0.8版本 , 将usbmux.py、tcprelay.py文件放在方便的位置
例: python /Users/mac/Desktop/python-client/tcprelay.py -t 22:10010
或 ssh [email protected] -p 10010
修改密码啥的见Cydia介绍
ssh 每次登录都需要输入密码令人烦躁
ssh-keygen
终端执行下面命令(如果iphone没有.ssh文件夹 自己手动创建)
scp -P 10010 ~/.ssh/id_rsa.pub root@localhost:~/.ssh
接着登陆iPhone 执行命令
cat ~/.ssh/id_rsa.pub >> authorized_keys
rm ~/.ssh/id_rsa.pub
退出手机在登录就不需要密码了
‘伍’ Win10 cmd/PowerShell SSH无法创建目录 和 SCP 找不到文件
然而.ssh目录明明就在用户名文件夹下存在= =
无法找到文件 : No Such File
事实上这个文件存在
cmd和PowerShell 的编码都是GBK, 讲道理是可以用中文的...
但是使用SSH命令显而易见可以看到中文名被解析成了转义字符 "323" 之类的.
使用ch找到目录和文件
然而.ssh目录明明就在用户名文件夹下存在= =
无法找到文件 : No Such File
事实上这个文件存在
cmd和PowerShell 的编码都是GBK, 讲道理是可以用中文的...
但是使用SSH命令显而易见可以看到中文名被解析成了转义字符 "323" 之类的.
使用chcp 65001换成utf-8也不行
当然也不可能重命名用户名文件夹..一大堆程序数据都在下面呢= =
之前装git有装git bash. 并且git bash 里可以设置中文字符集,因此就试了一下, 发现完全没有障碍= =
环境什么的完全没变, 可以正常找到.ssh目录 , 可以正常写入 known_host ,除了在第一次登的时候询问写入known_host, 之后免密登录也可以正常使用.
scp可以正常发送用户名目录下的文件, 不会找不到.
果然查遍全网也解决不了的问题是cmd自身的问题= =
使用Putty open登录主机, 好像不会提示known_host 的事情, 但是可以顺利免密登录.
‘陆’ SSH连接Ubuntu Server服务器的两种方式
SSH(secure shell)用于远程和服务器交互
Ubuntu Server默认安装了OpenSSH Server,可通过端口22连接
SSH客户端可以用用户名密码的方式连接服务器,也可以用密钥对的方式连接服务器。
可以使用SSH客户端工具PuTTY,windows10自带的SSH工具,或者VMWare的SSH工具连接服务器
1.在命令行用 用户名和密码连接
ssh username@serveraddress
2.SSH客户端还可以用 密码对 (公钥和私钥)连接
这里使用Win10自带的工具
生成密钥对
运行命令:ssh-keygen
添加公钥
打开生成的公钥文件id_rsa.pub,复制全部内容
使用SSH密码登录的方式登录Ubuntu服务器,在当前用户目录创建文件夹.ssh,进入.ssh文件夹并创建文件authorized_keys,粘贴从公钥复制的内容并保存文件
修改SSH配置
修改Ubuntu Server的文件:
/etc/ssh/sshd_config
将PubkeyAuthentication yes前面的注释去掉
运行命令重启sshd服务
sudo systemctl restart sshd
退出SSH连接,重新用私钥登录登录
ssh <username>@<serveraddress> -i <私钥路径>